Webgrind – удобный интерфейс для анализа быстродействия PHP скриптов

Владимир | | PHP, Web разработка.

О 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, показаны на скриншоте (кликните, чтобы увеличить).

etutorials webgrind profiling thumb

Как видите, было вызвано 192 функции, время выполнения которых составило 3227 мс. В столбце «Invocation Count» указано сколько раз вызывалась каждая функция.

Цифра в столбце «Total Self Cost» показывает, время выполнения самой функции, а в столбце «Total Inclusive Cost» — суммарное время выполнения функции и всех вызванных из неё функций.

По полученным данным несложно определить, что в данном примере основную часть времени выполнения скрипта заняло создание подключения к базе данных (функция mysql_connect).

Как видите, приложение довольно интересное и выглядит симпатично 😉 . В общем, советую попробовать.

До встречи!