Оптимизация производительности Laravel

Оптимизация производительности Laravel

С момента своего выпуска в 2011 году, Laravel стал популярным выбором для разработки бизнес-ориентированных приложений. Одна из причин, по которой Laravel очень популярен среди разработчиков, заключается в оптимизации производительности, которая позволяет разработчикам настраивать свои приложения.

В этом уроке я расскажу, как оптимизировать Laravel-приложение на продакшене.

Сервер

Предполагаю, что вы уже установили Laravel на свой сервер. У меня следующие настройки:

  • Laravel 5.5
  • PHP 7.1
  • MYSQL

Кэширование конфигурации

В Laravel есть замечательная команда artisan cache config, которая очень полезна для повышения производительности. Основное использование команды заключается в следующем:

php artisan config:cache

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

php artisan config:clear

Для дальнейшей оптимизации производительности вы можете использовать OpCache, который кэширует код php, поэтому вам не придется перекомпилировать его снова и снова.

 

Кэш маршрутизации

Кэширование маршрутов это очень важная оптимизация, особенно если у вас много маршрутов. Кэш маршрутов — это простой массив, который помогает повысить производительность Laravel. Запустите следующую команду:

php artisan route:cache

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

php artisan route:clear

 

Удаление неиспользуемых сервисов

В контексте оптимизации Laravel есть важный совет — не загружайте все службы из конфигурации. Важно отключать неиспользуемые службы из файлов конфигурации.

 

Оптимизация автозагрузки Composer

Рекомендуется использовать Composer для сканирования приложения и создания однозначной ассоциации классов и файлов в приложении. Используйте следующую команду:

composer dumpautoload -o

 

Лимитируйте подключаемые библиотеки

Важно всегда просмотреть все библиотеки, которые вызываются в коде. Если вы думаете, что можете решить задачу без использования библиотеки — удалите ее из config/app.php, для ускорения Laravel.

 

JIT-компилятор

Преобразование PHP-кода в байт-код и последующее его выполнение, при каждом запросе, является ресурсоемким процессом. Поэтому, посредники, такие как Zend Engine, нужны для выполнения подпрограмм на C. Чтобы сократить это время, важно повторить этот процесс только один раз, и именно здесь компилятор Just-in-time (JIT) оказывается очень полезным. Для приложений, основанных на Laravel, рекомендуется JIT-компилятор HHVM от Facebook.

 

Кэш результатов запросов

Кэширование результатов часто используемых запросов — отличный способ оптимизировать ваше приложение на Laravel. Для этого я рекомендую следующее:

$posts = Cache::remember('index.posts', 30, function() {
    return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();
});

 

Используйте жадную загрузку данных

Когда Eloquent использует жадную загрузку, он загружает все связанные объектные модели в ответ на первоначальный запрос. Давайте сравним жадную загрузку (eager loading) и ленивую загрузку (lazy loading).

Запрос ленивой загрузки будет выглядеть следующим образом:

$books = App\Book::all();
foreach ($books as $book) {
echo $book->author->name;}

Запрос жадной загрузки будет выглядеть следующим образом:

$books = App\Book::with('author')->get();
foreach ($books as $book) {
echo $book->author>name;}

 

Прекомпилирование ресурсов

Обычно разработчики размещают свой код во множестве отдельных файлах. Хотя это позволяет делать код чистым и легко управляемым, но это не способствует производительности приложения. Чтобы помочь разработчикам, Laravel предлагает простые команды:

php artisan optimize
php artisan config:cache
php artisan route:cache

 

Автор: KH. Jebran Ali
Перевод: Demiurge Ash