Хороший сайт должен быть не только красивым и удобным, но и быстрым. Если ваш сайт стал работать медленнее, но причин такого поведения быстро найти не удается - помочь определить проблемы в его коде сможет профилировщик.
Что такое профилировщик?
Профилировщик (или профайлер, от английского profiler) - это специальное программное обеспечение, которое дает возможность оценить:
- где именно;
- на какие операции;
- в каких объемах
тратятся ресурсы при выполнении скриптов. Эта информация полезна разработчикам, которые с ее помощью могут оптимизировать работу своих программ, уменьшить использование аппаратных ресурсов и сократить время работы скриптов.
Данные, которые собирает профилировщик, могут быть разными: количество использованной во время выполнения скрипта памяти, частота и продолжительность вызовов функций, время ответа на конкретный запрос и так далее.
Для проектов, написанных на PHP, наибольшей популярностью пользуются профилировщики XHProf и Tideways - бесплатные решения с открытым исходным кодом, которые можно использовать на нашем хостинге: мы сделали простую установку профилировщика и интерфейса для работы с ним прямо из Панели управления, чтобы нашим пользователям не приходилось тратить время и силы на его подключение.
Как установить профилировщик на сайт?
Установить профилировщик на сайт можно из раздела "Сайты" Панели управления: напротив доменного имени, прилинкованного к нужному сайту, кликните по иконке "Управление профилировщиком".
В открывшемся окне будет доступна справочная информация о том, какие действия необходимо будет предпринять после включения профилировщика для генерации отчета, а также кнопка "Включить".

По нажатию кнопки "Включить" запустится установка профилировщика и графического интерфейса для просмотра результатов профилирования. Профилировщик будет включен для сайта практически мгновенно, для установки интерфейса понадобится некоторое время: текущий статус установки будет отображаться в окне состояния профилировщика.

После завершения установки интерфейса в Панели управления появится соответствующее уведомление, а в окне настроек будут доступны логин и пароль для доступа к нему. Если Вы по какой-то причине удалили или изменили файлы графического интерфейса профилировщика - из этого же окна можно одним кликом восстановить данные для его корректной работы.

Как использовать профилировщик?
При включении профилировщик генерирует отчеты о работе вашего сайта, когда вы открываете его страницы. Каждую страницу сайта, для которой необходим отчет, вам нужно открыть самостоятельно: профилировщик запускается только для вашего IP-адреса. Посещения сайта другими пользователями не запускают профилирование, отчеты в таком случае создаваться не будут.
После генерации отчетов они будут доступны в интерфейсе - ссылка на него доступна в окне управления профилировщиком.

Главное окно

В главном окне интерфейса можно выбрать количество последних запросов, для которых собрана статистика, а также включить фильтр результатов по нескольким критериям: посещаемости страницы, нагрузки на CPU, используемой памяти и времени выполнения.

Если профилировщик включен для нескольких сайтов - в выпадающем списке можно выбрать конкретный домен, для которого нужно отобразить результаты.

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

Отчет о результатах
Каждый отчет профилировщика состоит из нескольких частей:
- общая информация о результатах профилирования - статистика общего выполнения скрипта, информация о Cookie и параметрах GET- и POST-запросов;
- подробная информация о результатах профилирования - статистика по каждой вызываемой скриптом функции;
- граф вызовов функций - визуальное отображение связи функций, выполняемых скриптом.
Общая информация об отчете

Первая часть отчета содержит общую информацию о работе скрипта, для которого запускалось профилирование. Если профилирование для скрипта запускалось несколько раз - интерфейс отобразит это: соответствующие счетчики будут отображены в графе "Точный URL" (в случае, когда отчеты собирались при посещении одной и той же страницы сайта) и "Похожие URL" (когда есть результаты профилирования страниц, адрес которых похож на адрес из текущего отчета).
Интерфейс отображает следующие данные статистики:
- Время выполнения скрипта (в микросекундах);
- Процессорное время, потраченное на работу скрипта (в микросекундах);
- Потребление памяти во время выполнения (в байтах);
- Количество вызовов функций внутри скрипта.
Также предоставляются следующие данные (при их наличии):
- информация о Cookie;
- информация о GET- и POST-запросах.
В общую информацию включена и диаграмма распределения функций, вызываемых в скрипте, по времени их выполнения: при наведении на сектор диаграммы отобразится название функции и потраченное на ее выполнение время.

Подробная информация об отчете (таблица)

В таблице подробной информации отображается статистика по каждой функции, вызванной в ходе работы скрипта. Цвет ячейки в колонке "Группа" соответствует цвету сектора на диаграмме распределения функций по времени выполнения - это позволяет быстро найти функцию, которая выполнялась дольше всего, не изменяя сортировку таблицы.
Таблица отображает следующие данные статистики:
- Количество вызовов функции за время работы скрипта;
- Время в микросекундах, потраченное на выполнение функции (как с учетом выполнения других функций внутри, так и без);
- Процессорное время в микросекундах, использованное на выполнение функции (как с учетом выполнения дочерних функций, так и без)
- Среднее и пиковое потребление памяти в байтах (также с учетом и без учета дочерних функций).
По клику на имя функции откроется расширенная статистика ее профилирования.

В расширенной статистике доступна информация как о самой функции, так и о родительских (тех функциях, которые в ходе своей работы вызывали исследуемую нами) и дочерних (тех функциях, которые вызывала исследуемая нами функция). Статистика собирается по следующим данным:
- количеству вызовов;
- времени выполнения в микросекундах;
- процессорному времени в микросекундах;
- потреблению памяти в байтах (как среднему, так и пиковому).

Граф вызовов
Интерфейс позволяет построить визуальное отображение вызовов всех функций во время работы скрипта - граф вызовов. Просмотреть его можно, кликнув по соответствующей ссылке в собранном отчете. Цветом в графе вызовов выделены функции, время выполнения которых было наибольшим, рядом со связью родительской и дочерней функции отображается количество вызовов.

Заключение
Профилирование - это важный метод оптимизации программного обеспечения, который предоставляет подробную информацию о вашем приложении на уровне кода. С помощью профилировщика вы сможете найти проблемные части вашего кода и оптимизировать его работу, а также отслеживать влияние изменений кода на производительность приложения - а наша моментальная установка из Панели управления позволит быстрее приступить к работе.