Когда ваш сайт готов и уже работает, вы, должно быть, захотите сделать его настолько быстрым и эффективным, насколько это возможно. XDebug предоставляет вам возможность профилирования вашего сайта. Профилирование означает определение того, сколько времени занимает выполнение того или иного метода класса (или функции). Это позволяет найти в коде узкие места и решить проблемы производительности.
Для использования программы профилирования XDebug, нужно установить следующий параметр конфигурации XDebug в файле xdebug.ini:
xdebug.profiler_enable = 1
К сожалению, для PHP у NetBeans нет встроенного инструмента для отображения результатов профилирования. Поэтому для этого нужно установить стороннюю программу. Ниже мы дадим инструкции по установке простого веб-инструмента Webgrind. Webgrind может работать на любой платформе, так как сам инструмент написан на PHP.
Установка Webgrind весьма прямолинейна.
Для начала нужно скачать его со страницы проекта и распаковать в какой-нибудь каталог. В Linux это можно сделать следующими командами:
cd ~
wget https://github.com/jokkedk/webgrind/archive/master.zip
unzip master.zip
Эти команды сменят ваш рабочий каталог на домашний каталог, затем скачают архив с Webgrind из Интернета и распакуют его.
После этого нужно сообщить веб-серверу Apache, где найти файлы Webgrind. Это значит, что вам придется настроить отдельный виртуальный хост. Мы уже изучили виртуальный хосты в Приложение A. Настройка среды веб разработки. Не забудьте перезапустить веб-сервера после настройки.
Наконец, откройте Webgrind в браузере, перейдя на URL установки. Например, если вы настроили виртуальный хост на обработку порта 8080, введите "http://localhost:8080" в адресной строке и нажмите Enter. Появится веб-страница Webgrind (см. рисунок Б.13):
В верхней части страницы вы можете выбрать, какой процент самых "тяжелых" функций будет показываться. По умолчанию, это значение равно 90. Установив значение ниже, можно скрыть функции, которые вызываются реже.
Выпадающий список в правой части этого поля позволяет выбрать файл профилированных данных для анализа. По умолчанию, выбрана опция "Auto (newest)", и Webgrind использует файл с последней временной меткой. Возможно, вам понадобится выбрать другой файл, например, если ваши веб-страницы используют асинхронные AJAX-запросы.
Крайний справа выпадающий список позволяет установить единицы, используемые для измерения данных. Возможные варианты это: проценты (по умолчанию), милисекунды и микросекунды.
После того, как вы выберите процент функций, имя файла и единицы измерения, нажмите кнопку Update (Обновить), чтобы Webgrind отобразил для вас данные (вычисление может занять несколько секунд). Когда вычисление закончится, вы увидите таблицу вызовов функций, отсортированную по убыванию "веса" функции. Самые тяжелые функции будут наверху.
Таблица имеет следующие столбцы:
Первый столбец (Function) показывает имя класса, а за ним имя метода (в случае вызова метода) или имя функции (в случае обычной функции).
Второй столбец содержит знаки параграфа, на которые можно нажать, чтобы открыть соответствующий исходный файл PHP
Столбец Invocation Count показывает, сколько раз была вызвана функция.
Столбец Total Self Cost показывает общее время, затраченное на выполнение встроенного PHP-кода в функции (не считая время, затраченное на выполнение других нестандартных функций).
Столбец Total Inclusive Cost содержит общее время выполнения для функции, включая как встроенный PHP-код, так и любые другие вызываемые пользовательские функции.
Нажав на заголовок столбца можно отсортировать данные в возрастающем или убывающем порядке.
Также вы можете кликнуть на иконку треугольника рядом с именем функции, чтобы развернуть список вызовов функций. Этот список позволяет посмотреть, кто вызывал эту функцию и сколько времени было затрачено, и содержит следующие столбцы:
Цветная полоса в верхней части страницы отображает вклад различных типов функций:
Обратите внимание на то, что при профилировании создается новый файл данных в каталоге /tmp для каждого HTTP-запроса. Это может вызывать "истощение" места на диске, что можно исправить лишь перезапуском системы. Таким образом, когда вы закончили профилирование вашего приложения, рекомендуется отключить профилирование, изменив файл php.ini, закомментировав параметр
xdebug.profiler_enable
как показано ниже, и затем перезапустить веб-сервер Apache.
;xdebug.profiler_enable = 0