Сайт на Laravel тормозит: где обычно причина
«Тормозит» — это не диагноз, а симптом, и у него есть привычная статистика причин. По симптому часто видно, куда смотреть в первую очередь:
- Где обычно причина
- N+1-запросы и отсутствующие индексы: один экран порождает сотни SQL-запросов
- Первый шаг
- Включить лог медленных запросов и посчитать запросы на страницу
- Где обычно причина
- Таблицы выросли: выборки без лимитов, «висящие» джобы, разбухшие логи и временные таблицы
- Первый шаг
- Посмотреть размеры таблиц и самые частые тяжёлые запросы
- Где обычно причина
- Синхронная работа в запросе: почта, генерация файлов, обращение к внешнему API
- Первый шаг
- Найти, что выполняется в запросе, и вынести в очередь
- Где обычно причина
- Исчерпаны воркеры PHP-FPM или соединения с базой; блокировки на горячих таблицах
- Первый шаг
- Метрики сервера и базы в момент пика, а не «в среднем»
- Где обычно причина
- Выключенный OPcache, отсутствие кэша конфигурации и роутов, debug-режим на проде
- Первый шаг
- Проверить конфигурацию окружения — это быстрые победы
«Взять сервер помощнее» — самый дорогой и короткоживущий способ: N+1 съедает любое железо, просто чуть позже. Апгрейд сервера оправдан, когда замеры показали, что упирается именно железо, — на практике это заметно меньшая часть случаев.
Оптимизация запросов и не только: как работает инженер
Порядок работ важнее конкретных приёмов — он защищает от «оптимизировали, а стало хуже»:
- 1Замер до: лог медленных запросов, число SQL-запросов на ключевых страницах, время ответа страниц, метрики сервера. Без этой точки отсчёта любое «стало быстрее» — ощущение, а не результат.
- 2Оптимизация запросов: N+1 закрывается жадной загрузкой связей, индексы строятся под реальные запросы из лога, тяжёлые выборки получают лимиты и пагинацию.
- 3Кэширование расчётливо: справочники и редко меняющиеся данные — да; кэш поверх медленного запроса вместо его починки — нет, это откладывание проблемы.
- 4Вынос тяжёлого из запроса: письма, выгрузки, интеграции и генерация документов уходят в очереди с повторными попытками и журналом ошибок.
- 5Гигиена окружения: OPcache, кэш конфигурации и роутов, выключенный debug, ротация логов — набор быстрых побед, который часто даёт заметный эффект за один день.
- 6Замер после — на тех же страницах и тех же данных. Разница «до и после» — единственное честное доказательство ускорения.
Поэтому я не обещаю «ускорим в N раз» до замеров: корректная работа с производительностью — это найденные узкие места и измеренная разница, а не обещание. Что нашли, что изменили, что стало — всё фиксируется в отчёте.
Остался без программиста: что делать в первую неделю
Уход единственного разработчика — управляемая ситуация, если действовать по порядку. Первая неделя — это не поиск нового подрядчика, а сбор контроля над активами:
- 1Соберите доступы: сервер, панель хостинга, домен и DNS, база данных, репозиторий кода, почтовые ящики системы, платёжные и интеграционные кабинеты. Всё — на аккаунты компании, не на личные.
- 2Найдите код: есть ли репозиторий и совпадает ли он с тем, что работает на сервере. «Код только на проде» — частая и решаемая ситуация, но о ней нужно знать до правок.
- 3Проверьте бэкапы: не «делаются ли», а восстанавливается ли из них система. Непроверенный бэкап — это лотерея, а не бэкап.
- 4Зафиксируйте «как есть»: не обновляйте версии, не чистите «лишние» файлы, не давайте никому править прод сгоряча — работающая система в неизвестном состоянии ценнее сломанной в известном.
- 5Соберите знания: документация, переписка с прошлым разработчиком, схемы, договорённости. Если расстались нормально — договоритесь об часе консультации, это дешевле недели раскопок.
- 6И только теперь ищите исполнителя — уже не «срочно кого-нибудь», а под понятную задачу: войти в проект через аудит.
Главная ошибка этой недели — пустить первого откликнувшегося «всё быстро поправить» в прод без бэкапов и репозитория. Вторая по частоте — согласиться на «здесь всё плохо, надо переписывать» до того, как кто-то реально посмотрел код: иногда переписать и правда дешевле, но это вывод из аудита, а не с порога.
Аудит Laravel-проекта: как безопасно войти в чужой код
В выросшем проекте проблема редко живёт в одном файле: ошибка может тянуться из SQL-запроса, очереди, cron-задачи, кэша, серверной конфигурации или старой бизнес-логики. Аудит — способ перестать действовать вслепую: проект проверяется по восьми зонам — код и архитектура, версии и зависимости, база и производительность, очереди и cron, сервер и деплой, бэкапы и логи, безопасность, интеграции и бизнес-риски.
На выходе — отчёт: список найденных проблем с разделением на «критично / важно / можно отложить», быстрые победы, которые безопасно сделать первыми, карта технического долга и план стабилизации по этапам. Отдельный честный пункт — вердикт, можно ли брать проект на поддержку и не дешевле ли строить новую систему рядом.
Как выглядит отчёт аудита — пример
На странице услуги — пример отчёта на синтетических данных: найденные проблемы с уровнями риска, медленные запросы с таймингами, состояние бэкапов и чек-лист деплоя. Такой же по структуре отчёт получает владелец проекта после аудита.
План спасения: от быстрых побед до сопровождения
После аудита работа выстраивается по ступеням — каждая закрывает свой уровень риска, и остановиться можно после любой:
- 1Быстрые исправления: высокий риск при небольшом объёме — бэкапы, логи, критичные ошибки, настройки окружения, очевидные SQL-проблемы, зависшие джобы.
- 2Антикризисный спринт: безопасный деплой, проверка восстановления, закрытие критичных сбоев и самых опасных узких мест — проект перестаёт быть пожаром.
- 3Плановая стабилизация: разбор кода, базы, зависимостей, очередей и инфраструктуры по приоритетам — если проект нужно развивать дальше.
- 4Сопровождение по SLA: мониторинг, реакция на инциденты в срок, обновления и плановые доработки — проект живёт с человеком, который его знает.
Rescue нужен не всем. Если система не критична для бизнеса, а правка локальная и понятная — аудит избыточен, задачу закроет любой аккуратный разработчик за пару часов. И обратное: если аудит показывает, что проект дешевле переписать, чем стабилизировать, я так и напишу в отчёте и предложу спроектировать новую систему — вместо того чтобы месяцами продавать вам стабилизацию безнадёжного кода.
Доработка и поддержка сайта на Laravel после стабилизации
Стабильный проект — это не финал, а нормальный режим жизни. Доработка сайта на Laravel при выстроенном процессе выглядит буднично: задачи идут через staging, изменения выкатываются с возможностью отката, версии обновляются планово, а не «когда совсем прижмёт».
- Наблюдение и бэкапы — минимальный формат для проекта, который не развивается активно: мониторинг, бэкапы с проверкой восстановления, обновления безопасности, дежурная реакция.
- Поддержка и развитие — для системы, которая растёт: регулярные доработки, контроль стабильности, планирование техдолга.
- Постоянный подрядчик, который уже знает систему, обходится дешевле, чем каждый раз искать нового «на пожар» — и по деньгам, и по времени входа в контекст.
Если на стабилизированном проекте дальше нужны новые контуры — интеграции с 1С и API, личные кабинеты, внутренние системы — они строятся уже на здоровом фундаменте: с деплоем, бэкапами и staging, а не поверх неизвестности.
Сколько стоит аудит и стабилизация Laravel-проекта
Форматы выстроены так, чтобы можно было начать с малого и остановиться на любом шаге:
- Когда это нужно
- Понять основные риски и ближайшие исправления
- Ориентир
- от 30–60 тыс. ₽
- Когда это нужно
- Проверить код, базу, сервер, безопасность и деплой
- Ориентир
- от 70–120 тыс. ₽
- Когда это нужно
- Закрыть критичные риски после аудита
- Ориентир
- от 120–250 тыс. ₽
- Когда это нужно
- Привести проект к управляемому состоянию
- Ориентир
- от 250–500 тыс. ₽
- Когда это нужно
- Мониторинг, бэкапы с проверкой восстановления, дежурная реакция
- Ориентир
- от 25–40 тыс. ₽/мес
- Когда это нужно
- Регулярные доработки, контроль стабильности
- Ориентир
- от 60–150 тыс. ₽/мес
Это ориентиры, а не смета: финальная оценка зависит от размера проекта, состояния кода, базы, сервера и критичности системы для бизнеса. Для работы понадобятся репозиторий, доступы и ответственный человек с вашей стороны — production я не правлю вслепую. Подробнее — на странице Laravel Rescue.
Частые вопросы
Сайт на Laravel тормозит — с чего начать? +
С замера, а не с правок: лог медленных запросов, число SQL-запросов на проблемных страницах, метрики сервера в момент торможения. В выросших проектах чаще всего виноваты N+1-запросы и отсутствующие индексы — их лечение дешевле апгрейда сервера и даёт больший эффект. Покупать железо стоит только тогда, когда замеры показали, что упирается именно оно.
Остался без программиста — что делать в первую очередь? +
Собрать контроль над активами: доступы к серверу, домену, базе и репозиторию — на аккаунты компании; убедиться, что код в репозитории совпадает с работающим на сервере; проверить, что из бэкапа реально можно восстановиться. Ничего не обновлять и не «чистить» сгоряча. Только после этого искать исполнителя — под задачу «войти в проект через аудит», а не «срочно кого-нибудь».
Сколько стоит аудит Laravel-проекта? +
Быстрый аудит — от 30–60 тыс. ₽: основные риски и ближайшие исправления. Глубокий — от 70–120 тыс. ₽: код, база, сервер, безопасность, деплой, бэкапы. На выходе — отчёт со списком проблем по уровням риска, быстрыми победами и планом стабилизации, а также честный вердикт: развивать проект или дешевле строить новый рядом.
Можно ли дорабатывать сайт на Laravel без старого разработчика? +
Да, это штатная ситуация — но входить в чужой код нужно через аудит или технический разбор, а не сразу правками в production. Понадобятся доступ к актуальному коду и серверу, информация о бэкапах и ответственный человек с вашей стороны. После аудита понятно, что можно дорабатывать безопасно, а что требует подготовки.
Вы гарантируете, что после оптимизации сайт ускорится? +
Без замеров — нет, и настороженно относитесь к тем, кто гарантирует. Честный процесс выглядит так: замер «до» на конкретных страницах, поиск узких мест, исправления, замер «после» на тех же данных. Разница в цифрах — единственное настоящее доказательство ускорения; она и фиксируется в отчёте.