Как ускорить PHP-приложение
Вопрос
Как вы подходите к оптимизации производительности PHP-приложения?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Измерить: 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 ошибок.