Почему профайлер Blackfire сообщает в 10 раз?

При тестировании локального сайта я заметил ~ 10-кратную разницу во времени, о которой сообщает Blackfire, по сравнению с другими источниками.

Настройка:

  • macOS High Sierra со всем стеком, установленным локально через Homebrew (по аналогии с камердинером Laravel’s)
  • Nginx 1.13.9
  • PHP 7.2.3, с opcache
  • Xdebug 2.6.0 (отключен во время профилирования)
  • Blackfire agent 1.16.0
  • Зонд черного огня 1.18.2
  • Последняя версия WordPress с темой и настройками по умолчанию, созданная с использованием собственного скелета на основе Composer, где WP является самой зависимостью
  • Автозагрузчик Composer оптимизирован
  • HTTPS (самоподписанный, подписанный с пользовательским локальным CA)
  • HTTP / 2

Результаты, достижения:

  • Черный огонь: 321ms
  • Синхронизация сети Chrome (TTFB): 34,80 мс
  • WordPress — плагин Query Monitor: 0,03 с (или 30 мс)
  • WordPress — плагин Laps: 0,029 с (или 29 мс)
  • CLI curl -s -o /dev/null \-w "%{time_total}\n" -k https://wp.test зацикливается 10 раз: AVG 0,044 с (или 44 мс, дельта отдельных пробегов составляет 2-3 мс)

Проверено несколько раз. Все источники, кроме Blackfire, довольно последовательны и сообщают время Диапазон 30-50 мс. Воспринимаемое время загрузки является «мгновенным», как реальные 30-50 мс. Время загрузки 350 мс было бы заметно, поэтому я верю, что Blackfire лежит здесь.

Что я делаю неправильно? Не заметил этого раньше.

Обновить:

  1. Протестировал некоторые другие вещи php — базовый файл только с phpinfo, административные скрипты memcached и opcache — все они очень быстрые, и Blackfire сообщает о том же времени, что и другие методы.
  2. Протестировано на Vagrant VM (Laravel’s Homestead), все сайты WordPress работают быстро, Blackfire также сообщает о том же времени, что и другие методы.

Учитывая вышесказанное, определенно что-то не так с Blackfire + WordPress + macOS High Sierra с локальным стеком EMP.

1

Решение

Профилирование кода — на любом языке — добавляет некоторые накладные расходы. Это зависит от движка, кода и некоторых других переменных, таких как компьютер, на котором выполняется профилированный код. В вашем случае накладные расходы замедляют работу страницы в 10 раз. Добавленная медлительность является изометрической, это означает, что вы можете рассуждать и улучшать свой код, используя результаты.

Вот указатель на документацию Blackfire, связанную с накладными расходами https://blackfire.io/docs/reference-guide/analyzing-call-graphs#understanding-blackfire-overhead

Также есть пост в блоге о PHP 7, профилировании и накладных расходах. https://tideways.io/profiler/blog/profiling-overhead-and-php-7

1

Другие решения

Других решений пока нет …