Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Не так давно перешел с 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. Какой самый расововерный подход?
Не в сети
использовать фасад \Cache. тэгировать однотипные записи чтобы при изменении соответствующих данных, можно было сбросить все зависимые кэши разом. скидывать в файл специально не надо – кэш умеет работать и на файлах в том числе если например на хостинге недоступен мемкэш или редис. в остальном в ларавеле нет специальных инструментов кэширования. есть апи, позволяющее положить нужные данные в кэш или сессию, а как их использовать – тебе решать, всё зависит от решаемых задач.
если есть страницы, которые вообще почти не меняются и можно их целиком положить в кэш, весь хтмл (примерно как работает WP Super Cache в вордпрессе или композитный режим в битриксе) – есть специальный пакет для этого, не скажу сходу название, который добавляет миддлварь, которая умеет избранные страницы именно так и кэшировать – для сайта типа визитки, который статический чуть менее чем полностью – это отличное решение.
если нужно кэшировать отдельные куски шаблонов – по-моему мне что-то попадалось, что добавляет в блейд директиву типа @cache, которая кэширует блок или инклюд, который содержит. но в этом случае ломается красивая mvc-структура, потому что данные при отдаче кэша выбирать не надо, а значит что выборка должна происходить при рендере шаблона – во вью-композере или даже в самом виде. с другой стороны эффективный код не всегда красив – так что это вполне допустимое решение.
ну и конечно кэширование данных, получаемых из базы или внешнего апи – \Cache::remember для этого – то что доктор прописал.
если есть вопросы по конкретным сценариям – пиши
Не в сети
Страницы 1