@SvizzZzy

Как лучше кешировать view в Laravel 5.4?

Есть часть страницы с большими сложными запросами, кеширую её данные запроса в redis таким способом:

$cache = cache("page-{$product->id}");
        if (!$cache){

          $view = view('product.index', ['product' => $product])->render();
          cache(["page-{$product->id}" => $view], 180);

        }else{

           $view = $cache;
        }

return  $view;


В этом случае в редис будет добавлен весь html код.
Еще думал добавлять в кеш только $product (коллекцию модели, без render view), но тогда добавляется еще больше мусора, ненужной информации о связях belongsToMany и тд, и размер записи кеша становится огромным и на 90% ненужным.


Есть ли более элегантный способ или и так сойдет ?
  • Вопрос задан
  • 1318 просмотров
Решения вопроса 1
neuotq
@neuotq
Прокрастинация
Чет у тебя сложно написано, можно проще:
$view = cache("page-{$product->id}", function () {
    $view = view('product.index', ['product' => $product])->render();
    cache(["page-{$product->id}" => $view], 180);
    return $view;
});
return  $view;


А насчет основного вопроса, тут строго индивидуально, слишком мало данных ты предоставил мало данных, можно долго исследовать как лучше и тд.
Но в целом кеширование целой html(условно говоря) страницы это ок, позволяет ЗНАЧИТЕЛЬНО ускорить работу сайта, особенно когда нужно меньше обновлять материал(допустим страница новости, без комментариев). Ну а что касается расхода памяти, ну а как иначе, вся суть кеширования это меньше расхода процессора, больше расхода озу.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
WebSEOkz
@WebSEOkz
SEOшник, веб-разработчик
Поддерживаю SvizzZzy и ни где не могу найти правильного ответа.
Если я не хочу кешировать всю страницу целиком, а хочу кешировать только отдельный html кусок, то как это оргинизовать, ведь вьюшка создаёт всю страницу целиком, а если кешировать отдельные колекции моделей, то реально кешь забивается ненужной информацией.

Как выводить страницу, состоящую из отдельных кешированных блоков?

Хорошим примером является меню сайта, которое одно для всех страниц, редко меняется, а составляется большими запросами в БД и связями разных уровней вложенности страниц и категорий. Если мне надо кешировать отдельно верхнее меню, контент и подвал сайта, то как это сделать и вывести потом во view?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы