Yii2 кешування

430

Від автора: вітаю вас, друзі. Ми продовжуємо цикл статей, присвячених знайомству з фреймворком Yii2. Дана стаття буде присвячена питанням кешування. Yii2 кешування дуже зручно використовувати в проектах, при цьому фреймворк пропонує нам різні варіанти кешування даних. Розглянемо.

Кешування — це механізм, який необхідний практично на будь-якому сайті. Суть кешування зводиться до того, що певні ділянки програми можна зберегти, наприклад, у файл і потім просто прочитати з файлу.

Простий приклад. На сайті є багаторівневе меню. Це меню, як ви розумієте, є на будь-якій сторінці сайту і на його формування витрачається відносно багато ресурсів. Для побудови меню необхідно зробити як мінімум один запит до БД, потім обробити результати запиту, побудувавши дерево (меню адже багатовимірне), потім з дерева сформувати необхідний варіант верстки.

При цьому меню — це той елемент сайту, який змінюється дуже рідко. Відповідно, є сенс заощадити на ресурсах і замість виконання запиту до БД і формування меню — просто взяти його з кешу. Погодьтеся, це буде значно швидше і виразно менш затратно по земельних ресурсах.

Кешування в Yii, як вже зазначалося, пропонується в декількох варіантах. Ми можемо кешувати дані на стороні сервера, наприклад, це може бути те ж саме меню. Ми можемо кешувати фрагменти сторінок або навіть сторінки цілком. Власне, в Yii2 ці варіанти описані в документації: кешування даних, кешування фрагментів, кешування сторінок і HTTP-кешування.

Давайте розглянемо перший варіант — кешування даних. Цього буде цілком достатньо для поняття механізму.

Отже, у нас є таблиця категорій і ми хочемо отримати з неї дані для формування меню категорій. Як ви розумієте, це саме ті дані, які змінюються рідко, нечасто на сайті з’являються нові категорії або змінюються існуючі. Саме тому є сенс кешувати ці дані. Але для початку давайте і отримаємо в контролері PostController::actionIndex.

$modelCategory = new Category();
$cats = $modelCategory::find()->all();

Yii2 кешування

Відповідно, у поданні контролера виведемо меню категорій:

  • name ?>

Yii2 кешування

Відмінно, все працює! Однак, для кожної сторінки ми повинні будемо виконувати один і той же запит до БД і потім формувати меню. Кешування даних дозволить спростити завдання. Скористаємося методами кешування даних get і set(). Перший метод дозволяє отримати ці дані, другий — закешувати дані. У підсумку наш код трохи зміниться.

$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 кешування

Як бачимо, використовувати кешування — дуже просто. На цьому ми, мабуть, зупинимося в цій статті. Більше про фреймворку ви можете дізнатися з наших безкоштовних або платних уроків. Також створення найпростішого блогу на Yii2 можна подивитися в цьому циклі уроків.