Оптимизация почти никогда не начинается с покупки более мощного сервера. В большинстве проектов первое ускорение в разы даёт база данных, а не инфраструктура.
Ниже — порядок работ, который мы применяем: от самого дешёвого и самого результативного к самому сложному.
Шаг 1. Найти, что тормозит
- Логировать медленные запросы и смотреть, какие из них выполняются чаще всего.
- Проверить, нет ли запросов внутри циклов — классическая проблема N+1.
- Замерить время ответа критичных страниц до изменений, иначе эффект будет не с чем сравнивать.
Шаг 2. База данных
- Индексы под реальные условия выборки, а не «на всякий случай» под каждую колонку.
- Eager loading вместо запросов в цикле.
- Пагинация вместо выборки всех строк, агрегаты в базе вместо подсчётов в PHP.
- Проверка планов выполнения запросов на больших таблицах.
Шаг 3. Всё, что можно не считать
- Тяжёлые вычисления — в фоновые задачи, ответ пользователю сразу.
- Кэширование справочников, счётчиков и результатов дорогих запросов.
- Кэш конфигурации, маршрутов и представлений на проде.
Шаг 4. Очереди и фоновые задачи
Письма, выгрузки, обмен с внешними системами и генерация документов не должны происходить в запросе пользователя. Очередь не только ускоряет ответ, но и делает систему устойчивее: сбой внешнего сервиса перестаёт ломать сценарий целиком.
// Вместо синхронной отправки в запросе
SendInvoice::dispatch($order)->onQueue('documents');
// Очередь переживает недоступность внешнего сервиса
public function failed(Throwable $e): void
{
Log::error('Счёт не отправлен', ['order' => $this->order->id]);
}
Шаг 5. Инфраструктура
- Горизонтальное масштабирование приложений и вынесение сессий и кэша из файлов.
- Отдельный сервер для очередей, чтобы фоновые задачи не конкурировали с вебом.
- CDN и сжатие статики.
- Laravel Octane — уже в самом конце, когда код перестал делать лишнюю работу.
Octane ускоряет приложение, но не исправляет медленные запросы: он убирает накладные расходы на загрузку фреймворка. Если узкое место — база, прирост будет скромным.
С чего начать
Если непонятно, где именно узкое место, начинать стоит с технического аудита: он даёт список конкретных проблем с оценкой эффекта. Дальше производительность улучшается уже точечно, по этому списку.