Профилирование помогает выявить:
# Установка (Linux)
sudo apt install php-xdebug
# Конфигурация php.ini
zend_extension=xdebug.so
xdebug.mode=profile
xdebug.output_dir=/tmp/xdebug
xdebug.trigger_value=START_PROFILING
xdebug.mode=profile
xdebug.start_with_request=yes
// В коде:
if (isset($_GET['XDEBUG_PROFILE'])) {
xdebug_start_profiling();
}
# Установка анализатора
sudo apt install kcachegrind
# Запуск
kcachegrind /tmp/xdebug/cachegrind.out.*
# Установка агента и расширения
curl -sSL https://packages.blackfire.io/gpg.key | sudo apt-key add -
echo "deb http://packages.blackfire.io/debian any main" | sudo tee /etc/apt/sources.list.d/blackfire.list
sudo apt update && sudo apt install blackfire-php blackfire-agent
blackfire agent:config --client-id=xxx --client-token=xxx
blackfire agent:start
blackfire run php script.php
<?php
$probe = new \Blackfire\Client();
$probe->enable();
// Код для профилирования
$probe->disable();
composer require tideways/profiler
php -S localhost:8000 -t ./public
ab -n 100 -c 10 http://localhost:8000/
До оптимизации:
Function Calls Time (ms)
getUserData() 1200
renderView() 800
После оптимизации:
Function Calls Time (ms)
getUserData() 400 (кэширование)
renderView() 300 (оптимизация шаблонов)
Xdebug лучше подходит для глубокого анализа конкретных участков кода, тогда как Blackfire — это профессиональное решение для постоянного мониторинга производительности. Для большинства проектов оптимально использовать Blackfire в production и Xdebug для локальной отладки.