php artisan config cache
Оптимизация производительности Laravel
С момента своего выпуска в 2011 году, Laravel стал популярным выбором для разработки бизнес-ориентированных приложений. Одна из причин, по которой Laravel очень популярен среди разработчиков, заключается в оптимизации производительности, которая позволяет разработчикам настраивать свои приложения.
В этом уроке я расскажу, как оптимизировать Laravel-приложение на продакшене.
Сервер
Предполагаю, что вы уже установили Laravel на свой сервер. У меня следующие настройки:
Кэширование конфигурации
В Laravel есть замечательная команда artisan cache config, которая очень полезна для повышения производительности. Основное использование команды заключается в следующем:
После запуска этой команды, не получится просто так менять конфигурационные файлы. Придется обновлять кеш, выполняя эту команду еще раз. Чтобы очистить кеш конфигурации, используйте следующую команду:
Для дальнейшей оптимизации производительности вы можете использовать OpCache, который кэширует код php, поэтому вам не придется перекомпилировать его снова и снова.
Кэш маршрутизации
Кэширование маршрутов это очень важная оптимизация, особенно если у вас много маршрутов. Кэш маршрутов — это простой массив, который помогает повысить производительность Laravel. Запустите следующую команду:
Не забывайте запускать команду каждый раз, когда вы вносите изменения в файл маршрутов или добавляете новый маршрут. Для очистки кэша используйте следующую команду:
Удаление неиспользуемых сервисов
В контексте оптимизации Laravel есть важный совет — не загружайте все службы из конфигурации. Важно отключать неиспользуемые службы из файлов конфигурации.
Оптимизация автозагрузки Composer
Рекомендуется использовать Composer для сканирования приложения и создания однозначной ассоциации классов и файлов в приложении. Используйте следующую команду:
Лимитируйте подключаемые библиотеки
Важно всегда просмотреть все библиотеки, которые вызываются в коде. Если вы думаете, что можете решить задачу без использования библиотеки — удалите ее из config/app.php, для ускорения Laravel.
JIT-компилятор
Преобразование PHP-кода в байт-код и последующее его выполнение, при каждом запросе, является ресурсоемким процессом. Поэтому, посредники, такие как Zend Engine, нужны для выполнения подпрограмм на C. Чтобы сократить это время, важно повторить этот процесс только один раз, и именно здесь компилятор Just-in-time (JIT) оказывается очень полезным. Для приложений, основанных на Laravel, рекомендуется JIT-компилятор HHVM от Facebook.
Кэш результатов запросов
Кэширование результатов часто используемых запросов — отличный способ оптимизировать ваше приложение на Laravel. Для этого я рекомендую следующее:
Используйте жадную загрузку данных
Когда Eloquent использует жадную загрузку, он загружает все связанные объектные модели в ответ на первоначальный запрос. Давайте сравним жадную загрузку (eager loading) и ленивую загрузку (lazy loading).
Запрос ленивой загрузки будет выглядеть следующим образом:
Запрос жадной загрузки будет выглядеть следующим образом:
Прекомпилирование ресурсов
Обычно разработчики размещают свой код во множестве отдельных файлах. Хотя это позволяет делать код чистым и легко управляемым, но это не способствует производительности приложения. Чтобы помочь разработчикам, Laravel предлагает простые команды:
Наш Телеграм-канал — следите за новостями о Laravel.
Задать вопросы по урокам можно на нашем форуме.
How to clear config cache in Laravel using Artisan
Many Laravel site users come across the dreaded “Whoops, looks like something went wrong.” error message when mirgating or upgrading their site or software.
Here at Bobcares, Our Support Engineers maintain hundreds of Laravel sites of web hosts, web designers, online publishers, and more.
In these sites, we’ve seen a wide range of reasons for this error that ranges from misconfigured .env file to messed up PHP engines.
But many of these errors could just be the stale config cache that was left over from the old site.
So, a quick cache clearing can get your site back online.
How to use Artisan in Laravel to clear config cache
Before we get into the details, here’s a quick reminder of what these terms mean:
What is Artisan?
Artisan is a command line tool provided with Laravel to administer your web app code.
If your site was setup for you by a developer, it’s best to leave Artisan alone.
For this tutorial, you only need to know one command.
What is Laravel Config Cache?
Part of why developers love Laravel is because of its modular nature.
Many devs create modules for each function in the site, and store their configuration in separate config files.
All these configuration files are stored under the config directory.
But having to read through all config files can slow down the site.
Laravel provides a way to merge all config options into one file to speed up the website.
Why should you clear the configuration cache?
Some configuration entries (such as database name or file paths) could be server dependent, and sometimes after migration (or upgrade), these entries can change.
You might change these values in the configuration file, but Laravel could still refer to the old values.
So, it’s best to just clear it.
How do delete cached Laravel config file
This is the point where you’ll need to use your command line access and execute this command:
php artisan config:clear
Now, if you don’t know how Artisan works or are unfamiliar with command line, click here to get a Laravel admin to do it for you.
If you are on a Shared Hosting account, or if you do not have the privileges to execute that command, you can delete the cached config file.
Bonus tip : How to clear application cache
Sometimes, it’s not the stale configuration entries that cause the “Whoops, looks like something went wrong.” error.
We’ve seen incompatible entries in the application cache also playing spoil sport.
So, it’s a good idea to clear that as well.
Again, head over to the command line interface, and issue this command:
php artisan cache:clear
If your site’s error is related to cache, these two commands should fix it.
Go ahead and reload the site.
None of this worked!
OK, don’t worry. There are a lot of other reason why Laravel could be failing.
If you need a quick solution, click here to consult our Laravel administrators. We are online 24/7 and can get on your case within a few minutes.
However, we would suggest that you consider getting a Server Administrator for your company who can monitor your server, perform falwless upgrades, and keep your server fast & secure.
If you need to talk to us about your site, click here to send us a mail.
Related posts:
PREVENT YOUR SERVER FROM CRASHING!
Never again lose customers to poor server speed! Let us help you.
Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.
Все о WEB программировании
WEB программирование от А до Я
Заказать сайт:
Социальные сети:
Партнеры:
Оптимизация производительности Laravel
Доброго времени суток. В данной статье мы поговорим о Laravel, об оптимизации web-приложения на Laravel. Да Laravel прост, быстр, но как и любое web-приложение может быть еще больше улучшен (оптимизирована производительность). И увеличить производительность Laravel достаточно просто. Для этого необходимо соблюдать некоторые правила.
И так, Laravel позволяет нам создавать мощный код с минимальными усилиями. Но, как и все web-приложения, приложения Laravel требуют оптимизации производительности. Производительность – это один из ключевых факторов успеха бизнес-приложения. Давайте рассмотрим основные правила оптимизации приложения, использующего Laravel.
Кэширование конфигурации.
Laravel умеет кэшировать конфигурацию приложения. Для этого используется artisan команда:
Но будьте внимательны, внесенные изменения в конфигурацию не будут работать пока вы не сбросите кэш конфигурации:
Кэширование маршрутов.
Laravel позволяет кэшировать и маршруту, что значительно ускоряет работу приложения. Для этого используйте команду artisan:
Но будьте осторожны, при изменение рутов необходимо и очищать кэш:
Удаление неиспользуемых сервисов
Нужно в файле конфигурации отключить неиспользуемые сервисы. Просто закомментируйте их в файле config/app.php
Оптимизация классов
Как и любое web-приложение (более-менее серьезное) имеет несколько включений файлов, используя конструкцию include. Да, это повышает читабельность кода, но замедляет производительность самого приложения. Для того, чтобы убрать включения и создать один файл выполните следующую команду:
Оптимизация автозагрузки с помощью composer
Для того, чтобы оптимизировать автозагрузку, используйте следующую команду:
Удаление и оптимизация библиотек
Laravel очень популярен благодаря и большому количеству библиотек, который повышают функциональность приложения. Но не все библиотеки качественные. Поэтому, если вам библиотека не нужна не используйте ее. Для этого удалите ее из файла config/app.php
Использование компилятора JIT
Перевод php-кода в байт-код достаточно ресурсоемкий процесс. Поэтому рекомендуется в продакшен использовать JIT компилятор. Для приложений Laravel рекомендуемым JIT-компилятором является HHVM от Facebook.
Использование быстрого кэша
Для оптимизации производительности Laravel необходимо использовать кэш для часто используемых и редко изменяемых данных, а также для сеансов. Одним из оптимальных вариантов является использование Memcached.
Использование жадной и ленивой загрузки.
Всем известна проблема N+1 запроса? Нет, тогда вам сюда. Используйте жадную или ленивую загрузку. В статье «Жадная и ленивая загрузка в Laravel. Методы with() и load().»описаны в чем разница и в чем преимущество их.
Заключение.
Мы с вами рассмотрели некоторые способы оптимизации производительности приложения Laravel, которые уже включены в сам фреймворк. Так же можно посоветовать использовать CDN для статического контента, использовать nginx, оптимизировать (cжать) картинки, которые используются на сайте и др.
Оптимизация производительности Laravel
Доброго времени суток. В данной статье мы поговорим о Laravel, об оптимизации web-приложения на Laravel. Да Laravel прост, быстр, но как и любое web-приложение может быть еще больше улучшен (оптимизирована производительность). И увеличить производительность Laravel достаточно просто. Для этого необходимо соблюдать некоторые правила.
И так, Laravel позволяет нам создавать мощный код с минимальными усилиями. Но, как и все web-приложения, приложения Laravel требуют оптимизации производительности. Производительность – это один из ключевых факторов успеха бизнес-приложения. Давайте рассмотрим основные правила оптимизации приложения, использующего Laravel.
Кэширование конфигурации.
Laravel умеет кэшировать конфигурацию приложения. Для этого используется artisan команда:
Но будьте внимательны, внесенные изменения в конфигурацию не будут работать пока вы не сбросите кэш конфигурации:
Кэширование маршрутов.
Laravel позволяет кэшировать и маршруту, что значительно ускоряет работу приложения. Для этого используйте команду artisan:
Но будьте осторожны, при изменение рутов необходимо и очищать кэш:
Удаление неиспользуемых сервисов
Нужно в файле конфигурации отключить неиспользуемые сервисы. Просто закомментируйте их в файле config/app.php
Оптимизация классов
Как и любое web-приложение (более-менее серьезное) имеет несколько включений файлов, используя конструкцию include. Да, это повышает читабельность кода, но замедляет производительность самого приложения. Для того, чтобы убрать включения и создать один файл выполните следующую команду:
Оптимизация автозагрузки с помощью composer
Для того, чтобы оптимизировать автозагрузку, используйте следующую команду:
Удаление и оптимизация библиотек
Laravel очень популярен благодаря и большому количеству библиотек, который повышают функциональность приложения. Но не все библиотеки качественные. Поэтому, если вам библиотека не нужна не используйте ее. Для этого удалите ее из файла config/app.php
Использование компилятора JIT
Перевод php-кода в байт-код достаточно ресурсоемкий процесс. Поэтому рекомендуется в продакшен использовать JIT компилятор. Для приложений Laravel рекомендуемым JIT-компилятором является HHVM от Facebook.
Использование быстрого кэша
Для оптимизации производительности Laravel необходимо использовать кэш для часто используемых и редко изменяемых данных, а также для сеансов. Одним из оптимальных вариантов является использование Memcached.
Использование жадной и ленивой загрузки.
Всем известна проблема N+1 запроса? Нет, тогда вам сюда. Используйте жадную или ленивую загрузку. В статье «Жадная и ленивая загрузка в Laravel. Методы with() и load().»описаны в чем разница и в чем преимущество их.
Заключение.
Мы с вами рассмотрели некоторые способы оптимизации производительности приложения Laravel, которые уже включены в сам фреймворк. Так же можно посоветовать использовать CDN для статического контента, использовать nginx, оптимизировать (cжать) картинки, которые используются на сайте и др.
Laravel Artisan Cache Commands Explained
Often times, when you are in the middle of developing a Laravel application, you may find that the changes you made in your code are not reflecting well on the application when testing.
Usually, the case is most likely caused by caching applied by the Laravel framework.
Here are some of the common commands you can run in your terminal to alleviate the issue.
❗️ Make sure you are running them in the context of your application. Meaning, your terminal is currently in the same directory as your Laravel application.
1. Configuration Cache
Caching configuration helps with combining all of the configuration options for your application into a single file which will be loaded quickly by the framework.
Clearing Configuration Cache
Exit fullscreen mode
If you want to quickly reset your configuration cache after clearing them, you may instead run the following command:
Exit fullscreen mode
Caching your configuration will also help clear the current configuration cache. So it helps save your time without having to run both commands.
2. Route Caching
Caching your routes will drastically decrease the amount of time it takes to register all of your application’s routes. When you add a new route, you will have to clear your route cache for the new route to take effect.
Clearing Route Cache
The following command will clear all route cache in your application:
Exit fullscreen mode
To cache your routes again, simply run the following command:
Exit fullscreen mode
Again, running the above command alone is enough to clear your previous route cache and rebuild a new one.
3. Views Caching
Views are cached into compiled views to increase performance when a request is made. By default, Laravel will determine if the uncompiled view has been modified more recently than the compiled view, before deciding if it should recompile the view.
Clearing View Cache
However, if for some reason your views are not reflecting recent changes, you may run the following command to clear all compiled views cache:
Exit fullscreen mode
In addition, Laravel also provides an Artisan command to precompile all of the views utilized by your application. Similarly, the command also clears the view cache before recompiling a new set of views:
Exit fullscreen mode
4. Events Cache
If you are using Events in your Laravel application, it is recommended to cache your Events, as you likely do not want the framework to scan all of your listeners on every request.
Clearing Events Cache
When you want to clear your cached Events, you may run the following Artisan command:
Exit fullscreen mode
Likewise, caching your Events also clear any existing cache in the framework before a new cache is rebuilt:
Exit fullscreen mode
5. Application Cache
Using Laravel’s Cache is a great way to speed up frequently accessed data in your application. While developing your application involving cache, it is important to know how to flush all cache correctly to test if your cache is working properly.
Clearing Application Cache
To clear your application cache, you may run the following Artisan command:
Exit fullscreen mode
❗️ This command will NOT clear any config, route, or view cache, which are stored in /bootstrap/cache/ directory.
6. Clearing All Cache
Laravel provides a handy Artisan command that helps clear ALL the above caches that we have covered above. It is a convenient way to reset all cache in your application, without having to run multiple commands introduced before.
To clear all Laravel’s cache, just run the following command:
Exit fullscreen mode
As you can read from the terminal feedback, all cache types that existed in your Laravel application will be cleared entirely, except Events cache.
🎁 Bonus
If the above Laravel’s Artisan commands don’t seem to resolve the issue you are facing, you may need to look at other related environments in your project that may be causing it.
When building a Laravel project, it is common to employ the Composer Dependency Manager for PHP, as well as NPM for any JavaScript library that might be needed in your project. We just have to take note that both package managers are using some form of caching for performance improvements.
Clearing Composer Cache
Sometimes, a new package you just installed via Composer doesn’t appear to be working at all. Or a new project you just cloned from a repository doesn’t seem to be running correctly.
Such issues are usually caused by classmap error from a newly installed library class, or the cached version of a particular library does not match with the ones required by the project codebase you just cloned. In such a situation, you need to update the PHP autoloader by running the following command:
Exit fullscreen mode
As well as any of the following variations(they all achieve the same purpose of deleting all content from Composer’s cache directories):
Кеширование в Laravel: основы плюс tips&tricks
Техника кеширования позволяет создавать более масштабируемые приложения, запоминания результаты некоторых запросов в быстрое in-memory хранилище. Однако, некорректно реализованное кеширование может сильно ухудшить впечатление пользователя о вашем приложении. Эта статья содержит некоторые базовые понятия о кешировании, различные правила и табу, которые я извлек из нескольких прошлых своих проектов.
Не используйте кеширование.
Ваш проект работает быстро и не имеет никаких проблем с производительностью?
Забудьте о кешировании. Серьезно 🙂
Оно сильно усложнит операции чтения из базы без каких-либо бенефитов.
Правда, Мохамед Саид в начале этой статьи делает некоторые вычисления и доказывает, что в некоторых случаях оптимизация приложения на миллисекунды способна сэкономить кучу денег на вашем AWS счету. Так что, если прогнозируемая экономия на вашем проекте больше, чем 1.86 долларов, возможно, реализация кеширования — неплохая идея.
Как это работает?
Сохранять это значение в кеше навсегда не самая лучшая идея, поскольку эту сущность Post могут обновить, но приложение всегда будет получать старое, закешированное, значение.
Поэтому функции кеширования обычно спрашивают какое время это значение хранить.
После истечения этого времени memcache или redis «забудут» про него и приложение возьмет свежее значение из базы.
Здесь я кладу сущность Post в кеш на 15 минут (начиная с версии 5.8 laravel использует секунды в этом параметре, раньше там были минуты). Фасад Cache также имеет удобный метод remember для этого случая. Этот код делает ровно тоже самое, что и предыдущий:
В документации Laravel есть глава Cache, которая обьясняет как установить необходимые драйверы для вашего приложения и главный функционал.
Данные в кеше
Все стандартные драйверы Laravel хранят данные как строки. Когда мы просим сохранить в кеше экземпляр модели Eloquent, оно использует функцию serialize, чтобы получить строку из обьекта. Функция unserialize восстанавливает состояние обьекта когда мы получаем его из кеша.
Почти любые данные могут быть закешированы. Числа, строки, массивы, обьекты (если они умеют корректно сериализоваться, смотрите описания функций по ссылкам ранее).
Сущности Eloquent и коллекции легко могут быть закешированы и являются самыми популярными значениями в кеше приложений Laravel. Однако, использование других типов тоже практикуется довольно широко. Метод Cache::increment популярен для реализации различных счетчиков. Также, атомарные локи весьма полезны когда разработчики сражаются с race conditions.
Что кешировать?
Первые кандидаты на кеширование — это запросы, которые выполняются очень часто, но их план выполнения не самый простой. Лучший пример — top-5 статей на главной странице, или последние новости. Кеширование таких значений способно сильно улучшить производительность главной страницы.
Инвалидация кеша
Протухание ключа через заданное время помогает обновить данные в кеше, но это происходит не сразу. Пользователь может поменять данные, но некоторое время он будет продолжать видеть старую версию их в приложении. Обычный диалог на одном из моих прошлых проектов:
События Eloquent могут помочь, или если ваше приложение генерит специальные события, такие как PostPublished или UserBanned это может быть еще проще. Пример с событиями Eloquent. Сначала надо создать классы событий. Для удобства я буду использовать абстрактный класс для них:
Разумеется, по PSR-4, каждый класс должен лежать в своем файле. Настраиваем Post Eloquent класс (используя документацию):
Создаем слушатель этих событий:
Этот код будет удалять закешированные значения после каждого обновления или удаления сущностей Post. Инвалидация списков сущностей, таких как top-5 статей или последних новостей, будет чуток посложнее. Я видел три стратегии:
Стратегия «Не инвалидируем»
Просто не трогать эти значения. Обычно, это не приносит никаких проблем. Ничего страшного в том, что новая новость появится в списке последних чуть позже (конечно, если это не большой новостной портал). Но некоторым проектам действительно важно иметь свежие данные в этих списках.
Стратегия «Найти и обезвредить»
Можно при каждом обновлении публикации, пытаться найти её в закешированных списках, и если она там есть, удалить это закешированное значение.
Выглядит уродливо, зато работает.
Стратегия «хранить id»
Инвалидация кеша не зря названа одной из двух трудностей в програмировании и весьма трудно в некоторых случаях.
Кеширование отношений
Кеширование сущностей с отношениями требует повышенного внимания.
Первый запрос был закеширован, а второй — нет. Когда драйвер кеша записывает Post в кеш, comments еще не загружены. Если мы хотим кешировать и их тоже, то мы должны загрузить их вручную:
Теперь кешируются оба запроса, но мы должны инвалидировать значения ‘post_’.$id каждый раз когда добавляется комментарий. Это не очень эффективно, поэтому лучше хранить кеш комментариев отдельно:
Иногда сущность и отношение сильно связаны друг с другом и всегда используются вместе (заказ с деталями, публикация с переводом на нужный язык). В этом случае хранить их в одном кеше вполне нормально.
Single source of truth для ключей кеширования
Время жизни ключей также можно вынести в константы, ради лучшей читаемости. Эти 900 или 15*60 увеличивают когнитивную нагрузку при чтении кода.
Не используйте кеш в операциях записи
Пожалуйста, не делайте так. Значение в кеше может быть устаревшим, даже если инвалидация сделана корректно. Небольшой race condition и публикация потеряет изменения, сделанные другим пользователем. Оптимистические блокировки помогут хотя бы не потерять изменения, но количество ошибочных запросов может сильно возрасти.
Лучшее решение — использовать абсолютно разную логику выборки сущностей для операций чтения и записи (привет, CQRS). В операциях записи всегда нужно выбирать свежее значение из базы данных. И не забывать о блокировках (оптимистичных или пессимистичных) для важных данных.
Я думаю, это достаточно для вводной статьи. Кеширование весьма сложная и пространная тема, с ловушками для разработчиков, но прирост производительности иногда перевешивает все трудности.