От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. Данная статья будет посвящена вопросам кэширования. Yii2 кэширование очень удобно использовать в проектах, при этом фреймворк предлагает нам различные варианты кэширования данных. Рассмотрим.
Кэширование — это механизм, который необходим практически на любом сайте. Суть кэширования сводится к тому, что определенные участки приложения можно сохранить, к примеру, в файл и затем просто прочитать из файла.
Простой пример. На сайте есть многоуровневое меню. Это меню, как вы понимаете, есть на любой странице сайта и на его формирование тратится относительно много ресурсов. Для построения меню необходимо сделать как минимум один запрос к БД, затем обработать результаты запроса, построив дерево (меню ведь многомерное), затем из дерева сформировать необходимый вариант верстки.
При этом меню — это тот элемент сайта, который изменяется очень редко. Соответственно, есть смысл сэкономить на ресурсах и вместо выполнения запроса к БД и формирования меню — просто взять его из кэша. Согласитесь, это будет куда быстрее и определенно менее затратно по ресурсам.
Кэширование в Yii, как уже отмечалось, предлагается в нескольких вариантах. Мы можем кэшировать данные на стороне сервера, например, это может быть то же самое меню. Мы можем кэшировать фрагменты страниц или даже страницы целиком. Собственно, в Yii2 эти варианты описаны в документации: кэширование данных, кэширование фрагментов, кэширование страниц и HTTP-кэширование.
Давайте рассмотрим первый вариант — кэширование данных. Этого будет вполне достаточно для понятия механизма.
Итак, у нас есть таблица категорий и мы хотим получить из нее данные для формирования меню категорий. Как вы понимаете, это именно те данные, которые изменяются редко, нечасто на сайте появляются новые категории или меняются существующие. Именно поэтому есть смысл кэшировать эти данные. Но для начала давайте и получим в контроллере PostController::actionIndex.
1 2 |
$modelCategory = new Category(); $cats = $modelCategory::find()->all(); |
Соответственно, в представлении контроллера выведем меню категорий:
1 2 3 4 5 |
<ul> <?php foreach($cats as $cat): ?> <li><?= $cat->name ?></li> <?php endforeach; ?> </ul> |
Отлично, все работает! Однако, для каждой страницы мы должны будем выполнять один и тот же запрос к БД и затем формировать меню. Кэширование данных позволит упростить задачу. Воспользуемся методами кэширования данных get() и set(). Первый метод позволяет получить кэшированные данные, второй — закэшировать данные. В итоге наш код немного изменится.
1 2 3 4 5 6 |
$cats = Yii::$app->cache->get('cats'); if(!$cats){ $modelCategory = new Category(); $cats = $modelCategory::find()->all(); Yii::$app->cache->set('cats', $cats, 3600); } |
Теперь после запуска данного кода внешне ничего не изменится. Однако на самом деле данные для меню категорий кэшируются. Мы можем убедиться в этом, заглянув во вкладку DB инструмента Yii Debugger. Там мы не обнаружим запроса на получение категорий после повторного обновления страницы. Однако сами категории при этом будут. Все правильно, они взяты из кэша. Сам файл кэша сохранен в папке runtime\cache.
Как видим, использовать кэширование — очень просто. На этом мы, пожалуй, остановимся в данной статье. Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.