Статья подготовлена для студентов курса «Backend-разработчик на PHP» в образовательном проекте OTUS.
В мире современного ПО и высоких скоростей разработки можно смело говорить о том, что ни один процесс написания программного кода не обходится без ошибок. Поиск логических ошибок возможен почти всегда — для этого есть фреймворки семейства xUnit и другие. Быстро вырастающие в объёмах проекты сталкиваются с проблемой более серьёзной — это потребление памяти и оптимальность кода.
Зачастую на входе задачи решаются на базе малых объёмов данных и малого числа входящих запросов. С их ростом успешно работающий код перестаёт удовлетворять заказчиков. Чтобы избавиться от проблем подобного рода, в языке PHP придумано множество различных способов анализа работы приложений.
Логирование состояния переменных
Начиная со встроенных функций, отслеживающих потребление ресурсов, разработчик может отследить связь между ростом нагрузки и ростом потребления ресурсов. Самой простым методом трассировки кода является логирование состояния переменных в тот или иной момент времени. Для этого достаточно написать довольно простую функцию, которая будет сохранять значение переменной в файл для последующего анализа:
Разумеется, эту функцию можно и нужно доработать проверками на существование директорий и создание директорий при возможности, но она показывает базовый функционал, который позволяет отслеживать состояние переменной в любой момент выполнения программы. Помните, что операции с диском довольно медленные, поэтому использовать подобное логирование в Production-среде нужно очень аккуратно.
XDebug и XHProf
Далее в игру вступают модули, написанные сообществом разработчиков — XDebug и XHProf.
Первое расширение является отладчиком, который умеет выводить на экран трассировку стека (подробной цепочки вызовов функции или метода в случае ошибки), упорядочивать вывод var_dump, интегрироваться с IDE и многое другое. Он является крайне необходимым при юнит-тестировании, так как тот же PHPUnit зависит от XDebug. Очень здорово, что XDebug содержится в репозиториях различных Linux-систем, поэтому поставить его не составляет труда. В Debian-подобных системах, например, установка будет выглядеть так:
После установки требуется просто перезагрузить веб-сервер, работающий с интерпретатором PHP.
Главной проблемой XDebug является то, что в Production-среде его использовать нельзя, так как он создаёт значительную нагрузку на приложение. А часто возникает ситуация, которую воспроизвести на Dev-среде просто не получается.
Глубокой модернизацией XDebug (а по сути — уже самостоятельным продуктом) является детище разработчиков Facebook — модуль XHProf. Он вполне может работать на Production-сайтах, создавая минимум нагрузки.
Установка системы проста:
После этого в коде можно использовать подключение этого механизма профилирования:
Узнать больше вы всегда сможете на курсе «Backend-разработчик на PHP». Изучайте языки программирования вместе с нами и задавайте вопросы в комментариях!