Ответ вслух Senior Производительность: OPcache и FPM спрашивают часто обновлено

Как ускорить PHP-приложение

Вопрос

Как вы подходите к оптимизации производительности PHP-приложения?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Начинаю с измерений: APM вроде New Relic, Tideways или открытых аналогов показывает, где тратится время, а профилировщик (Xdebug, SPX, Blackfire) даёт детали по функциям. Почти всегда главная причина в базе: N+1, нет индекса, выбор лишних колонок, отсутствие пагинации.

Что должно прозвучать в ответе

  • Измерить: APM, профилировщик, медленные логи SQL и FPM

  • База: индексы, N+1, лишние колонки, пагинация

  • Кеш: Redis для дорогих вычислений и ответов, HTTP-кеш

  • OPcache, оптимизированный автозагрузчик Composer, кеш конфигурации фреймворка

  • Очереди для тяжёлой работы вне запроса

  • FPM: число воркеров по памяти, долгоживущие рантаймы при необходимости

Что могут спросить следом

  • Как понять, что не хватает воркеров FPM?
  • Когда имеет смысл переходить на Octane или RoadRunner?

Разбор

Начинаю с измерений: APM вроде New Relic, Tideways или открытых аналогов показывает, где тратится время, а профилировщик (Xdebug, SPX, Blackfire) даёт детали по функциям. Почти всегда главная причина в базе: N+1, нет индекса, выбор лишних колонок, отсутствие пагинации. Это исправляю первым.

Дальше кеширование: дорогие вычисления и редко меняющиеся данные в Redis с понятной стратегией инвалидации, а для публичных страниц HTTP-кеш. Всё, что не нужно пользователю сразу, отправляю в очередь: письма, отчёты, вызовы внешних API.

Базовая гигиена окружения: OPcache с отключённой проверкой файлов в продакшене, composer install --optimize-autoloader, кеш конфигурации и маршрутов фреймворка. Число воркеров FPM подбираю по памяти и смотрю на очередь в статусе пула. Если основное время уходит на загрузку фреймворка, а запросов очень много, рассматриваю Octane, RoadRunner или FrankenPHP, понимая риски долгоживущего состояния.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.