Профилирование php-проекта: APD
При разработке сайта под большую нагрузку нужно постоянно искать слабые места в коде. К примеру, при добавлении нового функционала на частопосещаемой странице появился кусок кода (функция, метод), который заметно замедляет работу проекта в целом. Нет пределов совершенству, и проект можно вылизывать до бесконечности, но на что стоит обратить внимание — подскажет профайлер кода. Лично я использую в работе APD (Advanced PHP Debugger). Во-первых, он хранится в репозитории модулей PHP, во-вторых, мне понравилось им пользоваться, в-третьих, у автора есть достаточно подробное описание в книге «Профессиональное программирование на PHP», в-четвёртых, простота использования. Из минусов — давно не обновлялся и, видимо, уже заброшен разработчиком.
Установка производится с помощью инсталлятора PEAR
1 |
#pear install apd |
После чего в файл php.ini необходимо добавить установленное расширение и произвести настройку. (Приведу для примера параметры для Windows)
1 2 3 |
zend_extension = <Путь к установленному php>\ext\php_apd.dll apd.dumpdir = c:\apd_traces\ ; здесь будут храниться промежуточные файлы трассировок apd.statement_trace = 1 |
Если вызвать phpinfo(), должен появиться раздел с параметрами APD.
Использование.
Активизируется трассировка путём включения в нужный php-файл вызова функции
1 |
apd_set_pprof_trace('c:\TEMP\apd_traces'); |
Протоколируется следующие события:
- вход в функцию
- выход из функции
- использование инструкций include и require
.
При этом ведутся 3 счётчика:
- Real Time — прошедшее реальное время
- User Time — время, затраченное на пользовательский код
- System Time — время, затраченное на системные вызовы
.
После того, как файлы созданы (т.е. скрипт отработал), можно, к примеру, закомментировать строку вызова
1 |
apd_set_pprof_trace('c:\TEMP\apd_traces'); |
(она больше не нужна).
При установке APD из репозитория в папке
<Путь к php>\PEAR\Console\ появится файл pprofp.
Далее можно создать файл, к примеру, run.bat:
1 |
php.exe pprofp -r c:\TEMP\apd_traces\pprof.00288.53 > c:\TEMP\apd_out_rmT.txt |
где c:\TEMP\apd_traces\pprof.00288.53 — это промежуточный файл трассировок, созданный при выполнении скрипта, а c:\TEMP\apd_out_rmT.txt будет создан и будет содержать полезную информацию в удобной форме.
Можно, конечно, создать и более «умный» батник, котороый бы принимал имя промежуточного файла параметром, но статья не об этом.
В итоге в файле увидим время выполнения функций и количество вызовов, что в дальнейшем должно помочь писать более «быстрый» код.
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.