О xDebug знает, наверное, каждый PHP разработчик. Этот отладчик позволяет получить подробную информацию о работе PHP скрипта.
Одной из самых интересные его возможностей является анализ производительности (profiling). Если говорить кратко, то в этом режиме xDebug отслеживает, какие функции были вызваны и сколько времени они выполнялись. Т.е. вы сможете легко найти «узкие» места в приложении.
Но результаты анализа записываются в текстовый файл в специальном формате, и просматривать его с помощью обычного редактора очень не удобно. Самыми известными приложениями для работы с этими файлами являеются KCacheGrind (под Linux) и WinCacheGrind (аналог для Windows).
Но недавно я узнал, что существует web приложение для просмотра файлов. Называется оно Webgrind.
Установка простая до предела:
1) Скачать и распаковать архив в папку на сервере.
2) Открыть файл config.php и указать размещение папки с результатами анализа производительности (profiling). Подробности ниже.
3) Запустить webgrind в браузере.
А вот настройка немного сложнее.
Прежде всего, рассмотрим настройки xDebug. Для того чтобы включить режим анализа производительности (profiling) нужно в php.ini
задать следующие параметры:
[XDebug] xdebug.profiler_enable=1 xdebug.extended_info=0 xdebug.remote_enable=0 xdebug.auto_trace=0 xdebug.profiler_output_dir="E:/Docs/tmp" xdebug.profiler_output_name=cachegrind.out.crc32
Теперь после выполнения любого php скрипта в папке E:/Docs/tmp
появится файл cachegrind.out.crc32
с данными о вызванных функциях и времени их выполнения.
Настраиваем Webgrind. Для этого в файле config.php
(находится в папке с Webgrind) нужно указать папку, в которой размещен cachegrind.out.crc32
, т.е. указать туже папку, что и в параметре xdebug.profiler_output_name
.
$storageDir = 'E:/Docs/tmp';
После этого запускаем какой-нибудь скрипт. xDebug создаст файл с результатами анализа. Теперь можно запускать Webgrind.
Важно. Нужно отключить profiler перед запуском Webgrind (xdebug.profiler_enable=1
). Иначе в файл cachegrind.out.crc32
будут записываться результаты анализа производительности самого Webgrind, и одновременно он будет пытаться читать из этого файла. В результате браузер подвисает, а файл cachegrind.out.crc32
за пару минут увеличивается до 200 МБ.
В выпадающем списке выбираете нужный файл (cachegrind.out.crc32
), выбираете формат отображения времени выполнения функций (процент от общего времени выполнения скрипта, миллисекунды или микросекунды) и нажимаете кнопку «Update».
Результаты, которые выдает Webgrind, показаны на скриншоте (кликните, чтобы увеличить).
Как видите, было вызвано 192 функции, время выполнения которых составило 3227 мс. В столбце «Invocation Count» указано сколько раз вызывалась каждая функция.
Цифра в столбце «Total Self Cost» показывает, время выполнения самой функции, а в столбце «Total Inclusive Cost» — суммарное время выполнения функции и всех вызванных из неё функций.
По полученным данным несложно определить, что в данном примере основную часть времени выполнения скрипта заняло создание подключения к базе данных (функция mysql_connect
).
Как видите, приложение довольно интересное и выглядит симпатично 😉 . В общем, советую попробовать.
До встречи!