Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 05.03.2017 11:01:39

Стратегия кеширования.

Не так давно перешел с CakePHP, в связи с этим вопрос из серии лучших практик.

Сайт каталог.

Глобальное меню:

На каждой странице есть сложное меню которое генерируется из БД, меняется редко.

Как лучше всего его закешировать? Могу загенирить файл и постоянно подключать его в шаблоне. Хотелось бы использовать redis.

Как это делаете вы?

Похожие объявления:

На странице каталога присутствует элемент “похожие объявления”, его генерация трудоемка так как идет поиск по очень многои критериям. На каждой странице каталога этот элемент свой.

В CakePHP
Делал так:

Вот вьюшке:

echo $this->element ('boo/featured_items',array ('place'=>'list', 'category'=>(($category==1)?"rent":"sale"), …), 
['cache' => ['key' => $cache_key, 'config' => 'medium']]);

Метод element проверял наличие ключа в кеше и если его нет, запускал рендер элемента. Если в кеше есть этот ключ то просто читал из памяти готовый html и все.

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

$items = $this->requestAction(‘machinery_items/featured_items’, params);

Таким образом что бы добавить элемент на страницу нужно в представлении добавить echo $this->element с необходимыми параметрами и все.

Как это делать в Laravel. Какой самый расововерный подход?

Не в сети

#2 05.03.2017 11:37:09

Re: Стратегия кеширования.

использовать фасад \Cache. тэгировать однотипные записи чтобы при изменении соответствующих данных, можно было сбросить все зависимые кэши разом. скидывать в файл специально не надо – кэш умеет работать и на файлах в том числе если например на хостинге недоступен мемкэш или редис. в остальном в ларавеле нет специальных инструментов кэширования. есть апи, позволяющее положить нужные данные в кэш или сессию, а как их использовать – тебе решать, всё зависит от решаемых задач.

если есть страницы, которые вообще почти не меняются и можно их целиком положить в кэш, весь хтмл (примерно как работает WP Super Cache в вордпрессе или композитный режим в битриксе) – есть специальный пакет для этого, не скажу сходу название, который добавляет миддлварь, которая умеет избранные страницы именно так и кэшировать – для сайта типа визитки, который статический чуть менее чем полностью – это отличное решение.

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

ну и конечно кэширование данных, получаемых из базы или внешнего апи – \Cache::remember для этого – то что доктор прописал.

если есть вопросы по конкретным сценариям – пиши

Не в сети

Подвал раздела