Тест производительности PHP-кода
Каков наилучший способ проверить производительность моего PHP-кода?
Ответы
Ответ 1
xDEBUG (см. ответ Нила Айткена) полезен для определения проблем с низкой производительностью в PHP-коде, но его можно использовать только в очень контролируемых и ограничительных условиях - не в последнюю очередь его трудно понять, какое влияние оказывает на производительность.
Пока, как предлагает Патрик МАРИ, вы можете использовать ab - это не жизнеспособный подход, если транзакция, которую вы пытаетесь измерить, охватывает больше, чем страницу (например, вход в приложение и создание сеанса, добавление случайного продукта в корзину, повтор добавления случайное произведение N раз...).
AFAIK там нет PHP-решения для взаимодействия с записью/скриптингом, но есть Perl + WWW: Mechanize + HTTP: recorder. Или, если вы очень богаты, вы можете купить продукт с загрузкой HP.
Но очень сложно реализовать тестирование, которое действительно представляет, как используется приложение, и производительность приложения (по крайней мере, связанных с данными частей) будут меняться со временем - так что вам нужно создать надлежащие показатели производительности в своем код.
... и даже тогда время, затрачиваемое PHP на создание HTML-страницы, является лишь очень небольшой частью истории того, сколько времени требуется для отображения страницы в браузере.
НТН
С.
Ответ 2
Вы должны использовать ab (инструмент тестирования apache) для запуска большого количества запросов и xhprof, чтобы профилировать/анализировать ваш код. По моему мнению, это всего лишь основы, но дают отличные результаты.
Ответ 3
Вы можете использовать microtime(), чтобы избавиться от времени выполнения вашего кода.
Вот базовый фрагмент кода для этого:
$start_timestamp = microtime(true);
...
---your Code---
...
$end_timestamp = microtime(true);
$duration = $end_timestamp - $start_timestamp;
error_log("Execution took ".$duration." milliseconds.");
Ответ 4
xDebug имеет встроенный профайлер, после его настройки будут удалены некоторые файлы, которые вы можете прочитать с помощью программы, такой как kCacheGrind или WinCacheGrind
Затем вы сможете увидеть все вызовы функций, среднее и кумулятивное время вызова и общее время выполнения script. Очень полезно для поиска узких мест в вашем коде.
Ответ 5
Если вы хотите протестировать определенную часть кода, рассмотрите возможность использования пакета Benchmark из библиотеки PHP PEAR.
$timer = new Benchmark_Timer();
$timer->start();
// Code to test here
$timer->stop();
$timer->display();
Ответ 6
Как новый взгляд на старую проблему, рассмотрите возможность использования коммерческого инструмента, такого как NewRelic, чтобы помочь в профилировании. Я лично просто использую их, чтобы получить небольшую выборку данных для бесплатной или номинальной цены. Однако я полностью использую их полнофункциональный пробный продукт.
Ответ 7
Также вы можете использовать APD (Advanced PHP Debugger).
Это очень легко заставить работать.
Есть хороший учебник, как компилировать APD и делать с ним профилирование: http://martinsikora.com/compiling-apd-for-php-54