У вас есть (как минимум) два решения:
Довольно «наивный» использует microtime (true) до и после части кода, чтобы узнать, сколько времени прошло во время его выполнения; другие ответы говорили об этом и уже приводили примеры, так что я не буду больше говорить.
Это хорошее решение, если вы хотите сравнить несколько инструкций; например, сравнивать два типа функций - лучше, если это делается тысячи раз, чтобы убедиться, что любой «возмущающий элемент» усреднен.
Примерно так, поэтому, если вы хотите узнать, сколько времени потребуется для сериализации массива:
$before = microtime(true);
for ($i=0 ; $i<100000 ; $i++) {
serialize($list);
}
$after = microtime(true);
echo ($after-$before)/$i . " sec/serialize\n";
Не идеально, но полезно, и настройка не займет много времени.
Другое решение, которое работает весьма неплохо, если вы хотите определить, какая функция занимает много времени во всем сценарии, - это использовать:
- Расширение Xdebug для генерации данных профилирования для скрипта
- Программное обеспечение, которое считывает данные профилирования и предоставляет вам что-то удобочитаемое. Я знаю три из них:
- Webgrind ; веб интерфейс ; должен работать на любом сервере Apache + PHP
- WinCacheGrind ; только на windows
- KCacheGrind ; вероятно, только Linux и Linux-подобные; Это тот, который я предпочитаю, кстати
Чтобы получить файлы профилирования, вам необходимо установить и настроить Xdebug; взгляните на страницу документации Profiling PHP .
Обычно я не включаю профилировщик по умолчанию (он генерирует довольно большие файлы и замедляет работу) , но использует возможность отправить параметр с именем XDEBUG_PROFILE
в качестве данных GET, чтобы активировать профилирование только для нужной мне страницы.
Часть моего php.ini, связанная с профилированием, выглядит так:
xdebug.profiler_enable = 0 ; Profiling not activated by default
xdebug.profiler_enable_trigger = 1 ; Profiling activated when requested by the GET parameter
xdebug.profiler_output_dir = /tmp/ouput_directory
xdebug.profiler_output_name = files_names
(для получения дополнительной информации ознакомьтесь с документацией)
Этот снимок экрана взят из программы на C ++ в KcacheGrind:
(источник: sourceforge.net )
Вы получите то же самое с PHP-скриптами ;-)
(я имею в виду KCacheGrind; WinCacheGrind не так хорош, как KCacheGrind ...)
Это позволяет вам получить хорошее представление о том, что занимает время в вашем приложении, и иногда оно определенно помогает найти функцию , которая все замедляет ^^
Обратите внимание, что Xdebug считает время ЦП, затраченное PHP; когда PHP ждет ответа от базы данных (например), он не работает; только жду Так что Xdebug будет думать, что запрос БД не займет много времени!
Это должно быть профилировано на сервере SQL, а не на PHP, так что ...
Надеюсь, что это полезно :-)
Веселись!