Оптимизация производительности Laravel
С момента выпуска Laravel (2011 год) фреймворк стал очень популярным, особенно при разработке бизнес-ориентированных приложений. У этого есть много причин. Одна из них — возможность оптимизации производительности и настройки своих приложений. Итак, давайте попробуем оптимизировать Laravel-приложение на продакшене.
Сервер
Предполагается, что Laravel уже установлен на сервер. Мои настройки: • Laravel 5.5; • PHP 7.1; • MYSQL.
Кеширование конфигурации
В Laravel есть хорошая команда
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-кода в байт-код с последующим его выполнением при каждом запросе — очень ресурсоёмкий процесс. Поэтому, к примеру, для выполнения подпрограмм на C нужны такие посредники, как Zend Engine. Для Laravel-приложений рекомендуется использовать JIT-компилятор HHVM от Facebook.
Кеш результатов запросов
Прекрасный способ оптимизации — кеширование результатов наиболее часто используемых запросов:
$posts = Cache::remember('index.posts', 30, function() { return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get(); });
Используем «жадную» загрузку данных
Если Eloquent использует «жадную» загрузку, в ответ на первоначальный запрос загружаются связанные объектные модели. Давайте сравним два вида загрузок: eager loading и lazy loading.
Запрос lazy loading выглядит так:
$books = App\Book::all(); foreach ($books as $book) { echo $book->author->name;}
Запрос eager loading выглядит несколько иначе:
$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