Как оптимизировать Laravel для повышения производительности

Laravel — это популярный PHP-фреймворк с открытым исходным кодом, который известен своей надежной безопасностью и простой, но сложной архитектурой кодирования. Это отличный выбор для создания передовых веб-приложений, способных приносить доход и двигать бизнес вперед.

В наши дни Laravel не обошел стороной ни одного PHP-разработчика. Это либо разработчик младшего или среднего уровня, которому нравится быстрое развитие, предлагаемое Laravel, либо разработчик старшего уровня, который вынужден изучать Laravel из-за давления рынка.

Поскольку на Laravel работает более миллиона сайтов, Google подчеркивает важность скорости работы сайта, а пользователи менее & менее приемлемы к чему-либо, кроме невероятно гладкого пользовательского опыта — некоторые создают PHP & фреймворкам, таким как Laravel, репутацию менее производительных, чем другие фреймворки. Хотя в этом есть доля правды, это не значит, что вы ничего не можете с этим поделать — поэтому в этом руководстве мы подробно рассмотрим, как можно оптимизировать Laravel для производительности.

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

Почему оптимизация производительности Laravel так важна?

В этой статье мы рассмотрим несколько важных советов, каждый из которых содержит пошаговое руководство по оптимизации вашего сайта на Laravel. Хотя некоторые шаги могут показаться техническими, их легко выполнить и воссоздать на собственном экране.

1. Кэширование маршрутов

Laravel позволяет кэшировать маршруты. Вы можете выполнить команду Artisan:

php artisan route:cache
Войти в полноэкранный режим Выйти из полноэкранного режима

и все ваши маршруты будут кэшированы в файле routes.php.

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

Для очистки кэша используется аналогичная команда:

php artisan route:clear
Войти в полноэкранный режим Выйти из полноэкранного режима

Кэширование маршрутов — это простой способ сделать ваш сайт более шустрым и быстрым.

2. Эффективное использование команд Artisan

Одной из лучших особенностей Laravel является инструмент командной строки под названием Artisan. Если вы будете использовать его эффективно, то сможете повысить производительность вашего приложения.

Вы можете кэшировать маршруты, а также конфигурацию. Вы можете выполнить следующую команду для кэширования конфигурации и маршрутов:

php artisan config:cache

php artisan route:cache
Войти в полноэкранный режим Выйти из полноэкранного режима

Примечание: Artisan Optimize был удален в laravel 5.5, но работает в предыдущих версиях.

php artisan optimize --force
Войти в полноэкранный режим Выйти из полноэкранного режима

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

php artisan config:clear
php artisan route:cache
php artisan view:clear
Войти в полноэкранный режим Выйти из полноэкранного режима

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

Laravel предоставляет исключительно интересную команду Artisan Cache Config, которая очень полезна для повышения производительности. В основном команда используется следующим образом:

php artisan config:cache
Войти в полноэкранный режим Выйти из полноэкранного режима

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

php artisan config:clear
Войти в полноэкранный режим Выйти из полноэкранного режима

4. Ускоренная загрузка

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

В некоторых случаях такое поведение ленивой загрузки увеличивает количество выполняемых запросов и в то же время снижает производительность приложения.

Давайте рассмотрим простой пример, чтобы понять это поведение в деталях. Если вы хотите получить имя автора книг, находящихся в библиотеке.

При ленивой загрузке вы в итоге выполните N+1 запрос, чтобы найти результат. Вы можете увидеть это из приведенного ниже примера кода.

$books = Book::all();

foreach ($books as $book) {
  echo $book->author->name;
}
Вход в полноэкранный режим Выход из полноэкранного режима

В приведенном ниже коде каждый раз, когда выполняется цикл for, выполняется запрос. Чтобы решить эту проблему, Laravel позволяет загружать данные с нетерпением.

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

$books = Book::with('author')->get();

foreach ($books as $book) {
  echo $book->author->name;
}
Вход в полноэкранный режим Выйти из полноэкранного режима

5. Оптимизация Composer

Laravel использует отдельный инструмент под названием Composer для управления различными зависимостями. Когда вы первоначально устанавливаете Composer, он по умолчанию загружает в вашу систему dev-зависимости.

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

При использовании Composer для установки пакетов используйте параметры —no-dev и -o следующим образом, чтобы удалить dev-зависимости:

composer install --prefer-dist --no-dev -o
Войти в полноэкранный режим Выйти из полноэкранного режима

Эта команда позволяет Composer создать каталог для оптимизации автозагрузки и повышения производительности. Она просто запрашивает извлечение и упаковку официального дистрибутива, без каких-либо зависимостей dev.

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

6. Минификация и пакетирование активов

Здесь вам может помочь Laravel mix, который компилирует все ваши CSS и создает единый файл app.css, сокращая таким образом количество HTTP-запросов до одного.
Вы также можете удалить неиспользуемый CSS из вашего проекта с помощью пакета laravel-mix-purgecss, просто установите его в ваш проект разработки:

npm install laravel-mix-purgecss --save-dev

or

yarn add laravel-mix-purgecss --dev
Вход в полноэкранный режим Выйти из полноэкранного режима

теперь в вашем webpack.mix.js

const mix = require('laravel-mix');
require('laravel-mix-purgecss');

mix.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css')
.purgeCss();
Войти в полноэкранный режим Выйти из полноэкранного режима

7. Очереди

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

Например, когда пользователь регистрируется на сайте, нам приходится выполнять множество действий в бэкенде, таких как хранение информации о пользователе, отправка активационного письма, отправка приветственного письма и т.д. Если мы просто отправим письмо (без очереди), то это займет около 4-5 секунд. И пользователю придется ждать, пока придет запрос. Таким образом, с очередями нам просто нужно продвигать действия внутри очередей после выполнения необходимых проверок и показа пользователю сообщения об успехе. После этого нам просто нужно обработать основные действия, когда очереди будут выполняться.

Простыми примерами этого являются:

  • Отправка электронной почты
  • загрузка файлов
  • Загрузка файлов

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

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

8. Быстрый кэш или драйверы сессий

Чтобы повысить производительность приложений Laravel, мы можем хранить сессии и кэшировать их в оперативной памяти. Memcached — лучший и самый быстрый кэш и драйвер сессий для этого. Laravel гибко переключает один кэш/драйвер сессий на другой.

Для драйвера сессии мы можем изменить ключ драйвера в config/session.php, а для кэша мы можем изменить ключ драйвера в файле config/cache.php.

9. Индексирование базы данных

Когда мы говорим об увеличении производительности приложения, мы следуем многим практикам Laravel, таким как кэширование, загрузка данных, минификация активов и т.д. Но есть еще одна вещь, которая может помочь нам улучшить производительность, а именно индексирование базы данных. По сути, это техника на уровне базы данных.

По сути, индексирование базы данных — это структурирование данных, основанное на одном или нескольких столбцах таблицы базы данных. Основная идея индексирования заключается в ускорении поиска данных. Она помогает легко находить данные без необходимости просматривать каждую строку при каждом обращении к базе данных.

Используя столбцы, индексирование помогает минимизировать обращения к диску для каждого обрабатываемого запроса. Индексирование базы данных является мощной техникой оптимизации базы данных и повышает общую производительность базы данных.

В Laravel мы можем создать индексирование с помощью миграций. Ниже приведен пример:

Schema::create(‘users’, function (Blueprint $table) {
   $table->string(’email’)->index();
});
Вход в полноэкранный режим Выход из полноэкранного режима

10. Использование JIT-компилятора

PHP — это компьютерная машина и язык серверной стороны. Она не воспринимает PHP-код нативно. Обычно программисты используют компилятор для компиляции кода в байткод и интерпретации PHP-кода. Процедура компиляции программы влияет на производительность приложения Laravel и удобство работы пользователей. SO, программисты Laravel могут использовать Zend Engine, который поставляется с компилятором just-in-time, чтобы компилировать код быстро и сразу.

11. Сжимайте изображения

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

Если вы используете Laravel Mix, при компиляции изображений рекомендуется использовать пакет NPM, например ImageMin. Для очень больших изображений попробуйте сначала сжать изображение с помощью TinyPNG, а затем используйте ImageMin для максимального сжатия.

12. Кэширование представлений

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

php artisan view:cache
Войти в полноэкранный режим Выйти из полноэкранного режима

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

php artisan view:clear
Войдите в полноэкранный режим Выход из полноэкранного режима

13. Удаление неиспользуемой службы

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

Но при этом следует включать только те сервисы, которые вы используете. Все остальные неиспользуемые сервисы должны быть остановлены.

Вы можете остановить эти службы, закомментировав их в файле config/app.php. Это уменьшит время загрузки вашего приложения и увеличит его производительность.

14. Использование CDN для доставки статического контента

CDN — это отличный способ доставки статического контента по всему миру. Если ваше приложение становится популярным, вы можете захотеть добавить инфраструктуру CDN для вашего приложения.

Давайте рассмотрим простой пример, в котором вы разместили свое приложение на сервере, находящемся в США. Теперь, если у вас есть запрос из Индии, вам потребуется много времени, чтобы обслужить контент для этого запроса.

Чтобы решить эту проблему, на помощь приходит CDN. CDN кэширует несколько статических страниц. Теперь запрос сначала направляется в CDN, и если контент присутствует в CDN, страница обслуживается напрямую. Это значительно увеличивает скорость обслуживания контента, а также повышает удобство работы конечного пользователя.

15. Минимизируйте CSS и JS

Вы всегда должны сжимать файлы CSS и JavaScript до того, как вы соберете эти файлы в рабочую среду. Это улучшит пользовательский опыт, а также уменьшит количество HTTP-вызовов. Это отличный совет по оптимизации производительности Laravel.

Существуют различные инструменты для сжатия этих файлов и объединения их в один файл. Вы можете использовать Laravel-packer, который позволяет сжимать и минифицировать код CSS и JavaScript. При необходимости вы также можете изменить размер изображений для создания миниатюр.

16. Удаление зависимостей Dev

Зависимости Dev часто устанавливаются в систему по умолчанию при первой установке Laravel или композитора. Хотя эти зависимости и помогают в создании сайта, они не нужны, когда ваш сайт уже работает.

Вы можете ввести эту простую команду через Artisan, чтобы удалить эти зависимости:

composer install --prefer-dist --no-dev -o
Войти в полноэкранный режим Выйти из полноэкранного режима

ПРИМЕЧАНИЕ: Зависимости Dev отличаются от зависимостей, которые требуются во время выполнения. Не удаляйте зависимости во время выполнения, так как это может повлиять на производительность вашего сайта или даже привести к сбою некоторых частей сайта.

17. Используйте Lumen для небольших проектов

Бывают случаи, когда разработка небольшого приложения (например, мобильного или Angular-приложения) не требует использования полнофункционального фреймворка, такого как Laravel. В этом случае лучше использовать Lumen.

Lumen — это микрофреймворк, разработанный тем же создателем Laravel. Как облегченная версия Laravel, Lumen ориентирован на скорость и производительность микросервисов. Он требует минимальной настройки и альтернативных параметров маршрутизации при создании веб-приложений, что позволяет ускорить процесс разработки.

Например, Lumen может обрабатывать 100 запросов в секунду. Вы также можете интегрировать инструменты или пакеты от сторонних разработчиков, чтобы получить новые возможности. Более того, Lumen поддерживает все платформы и позволяет перейти на Laravel.

18. Ограничение включенных библиотек

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

Поэтому очень важно просканировать все данные библиотек, используемых в настоящее время в коде. Вы можете найти эти библиотеки в файле config/app.php. При изучении библиотек удалите те, которые, как вы знаете, больше вам не нужны.

Также не лишним будет просмотреть composer.json на предмет ненужных зависимостей.

Спасибо, что прочитали этот блог.

Оцените статью
Procodings.ru
Добавить комментарий