Напевно багато php розробників використовують профайлер xdebug для пошуку вузьких місць в своїх аплікухах. Але просто дивитися логи не зручно, тому були створені інструменти для їх візуалізації. Про них я розповім.
Webgrind це набір php скриптів, які можна поставити на локальний чи віддалений веб сервер. Далі все просто – закачуємо лог і дивимося статистику.
Найочевидніший плюс Webgrind’а це мультиплатформенність і простота встановлення.
Показує список функцій які викликалась, кількість викликів (Invocation Count), загальний час витрачений на виклик (Total Self Cost) і загальний час витрачений на виконання (Total Inclusive Cost).
Можна приховати php функції. Можна перейти всередину функції, щоб побачити розгорнуту статистику.
Для роботи KCachegrind потрібні бібліотеки 3-го KDE. Буде працювати у більшості Unix-подібних ОС (в мене точно працює в Ubuntu і FreeBSD), а також Windows (через Cygwin) і MacOS X (я не перевіряв). Це мабуть найфункціональніший і найзручніший інструмент для визуалізації профайлів.
Видно виклики функцій, час, а також можна подивитись граф викликів (дуже зручно) і карту (інколи теж зручно).
WinCacheGrind це обрізаний KCachegrind для Windows. Звісно можна спробувати запустить на віртуальній машині під іншими ОС, але я не бачу в тому сенсу. З функціоналу доступний перегляд викликів функцій, також можна приховати швидко працюючі функції.
Якщо про вищеперераховані інструменти ви мабуть знали, то про xdebugtoolkit, швидше за все, чуєте вперше :). Він дозволяє візуалізовувати ось такі графи:
Взагалі, якщо дуу-у-же не хочеться тягнути в систему KDE либи для установки KCachegrind, то можна використовувати xdebugtoolkit в парі з Webgrind.
Визуалізатор для MacOS X. Я його не використовував (з MacOS X майже не працював). Виглядає ось так:
Інтерфейс схожий на WinCacheGrind. Судячи з опису функціонал аналогічний.
Це вітчизняна 🙂 розробка хабраюзера “Develar”. Працює на Adobe AIR. Скріншот дуже великий, ось лінк. И цитата з опису:
CachegrindVisualizer строит более информативный граф, чем KCacheGrind — на острие ребра есть метка, набранная шрифтом меньшего размера, — это собственное время (self time) затраченное на выполнение этой функции, — собственное время выполнения именно этого вызова, а не всех вызовов данной функции.
Виглядає непогано.
Післямова
Як я і обіцяв опис короткий. З більшістю цих аплікух я працював давно. Зараз використовую KCachegrind, як найбільш зручний і функціональний інструмент.
PS. Щоб увімкнути профайлер в xdebug треба прописати “xdebug.profiler_enable = 1” в php.ini :).
UPD. На Хабрі є переклад статті про профілювання коду з допомогою xdebug Profiling PHP Applications With xdebug. У ній більш докладно розписана робота з WinCacheGrind і KCachegrind.
На даний момент використовую Zend Debugger. Зіштовхнувся з тим, що він вимагає тільки non-thread-safe версію PHP. Відповідно про використання Apache гілки 2.х можна забути (мова звісно ж про Віндовс).
З xdebug таких проблем немає? Працює з ts і nts версіями РНР?
немає. в мене працює і під віндою з Apache 2.x і під фрьою з gninx+php-fpm5.2.11