Есть распространенное мнение, что Laravel почти самый медленный фреймворк, что даже его название нужно читать медленно и только одним пользователем на 1 ядро CPU. Но к счастью это не так.

Как и другие PHP фреймворки, Laravel может тормозить по трем причинам:

  • Избыточная работа с базой (большое количество запросов на страницу, запросы без индексов, запросы блокирующие таблицы)
  • Избыточная работа в PHP (примеров массы)
  • Не настроенный сервер баз данных
  • Не настроенный сервер с PHP

Самым тормозным фреймворком, обычно является самый популярный - ввиду того что большое количество разработчиков совершает одни и те же ошибки, а сисадмины не оптимизируют сервера. Просто на массовом фреймворке это видно.

Оптимизация сервера под Laravel состоит ровно из тех же моментов, что и оптимизация обычного web-сервера:

  • Оптимизация файловой системы (и это не важно ssd под ней или hdd)
  • Оптимизация настроек базы данных
  • Наложение индексов на таблицы по полям участвующих в запросах
  • Установка и обязательная настройка opcache
  • Настройка php-fpm (почему его все ставят, но не настраивают?)
  • Оптимизация nginx

Следующие величины показывают разницу в отдаче одной и той же страницы на одном и том же сервере и тех же данных:

Без оптимизации:

  • 320ms ответ PHP-бакенда
  • 0.90s загрузка страницы и всей статики.
  • 12 параллельных запросов на 6 CPU без проседания скорости отдачи (37 запросов в секунду)
  • 4 GB RAM использовано.

С оптимизацией:

  • 34ms ответ PHP-бакенда
  • 0.52s загрузка страницы и всей статики.
  • 72 параллельных запроса на 6 CPU (~2150 запросов в секунду)
  • 19 GB RAM использовано.

Между первым и вторым замером была настроена ОС (ввод-вывод, файловые системы), PHP (пулы fpm, opcache, php.ini), mysql (io, innodb, nice, наложены индексы, оптимизированы таблицы), nginx (keepalive, io, http 2.0, настройки fastcgi, gzip, кеш на клиенте, прочее).

Разница, как видите велика и происходит благодаря более разумному расходу ресурсов - более дешевая и доступная RAM в пользу экономии IO, CPU, повышения парралелизма.

Это была вводная статья, далее мы расскажем отдельными подробными статьями о том, как добиться похожего результата.