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