Кешування за розкладом в 1с-бітрікс

Кешування - технологія, що підвищує продуктивність системи за рахунок відмови від повторних запитів до бази даних. Застосовується в тих випадках, коли читання інформації з диска (створеного кеша) продуктивніше звернення до бази. Таке буває, наприклад, при великій кількості запитів, коли на створення однієї сторінки для одного користувача, потрібно понад 200 запитів. Для відображення цієї ж сторінки для 10 користувачів, буде потрібно в 10 разів більше ресурсів. Кешування дозволяє зняти цю проблему - більшості користувачів буде відображена збережена копія, на створення якої не будуть потрібні запити.

В 1С-Бітрікс реалізовано кілька типів кеша, таких як кешування компонентів, керований кеш, некерований кеш і інші.

Робота кеша, способи його створення

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

Кешування компонентів (автокешірованіе) - вбудований в компоненти механізм, що дозволяє в спрощеному режимі реалізувати можливість кешування. Викликається одним рядком у файлі компонента:

Якщо результат цього виклику true. то це означає що кеша немає і його потрібно створити. Якщо ж результат false. то вміст кеша буде виведено на екран і буде заповнений масив $ arResult. Такий кеш залежить від параметрів в масиві $ arParams. скидається через час, вказане в $ arParams [ "CACHE_TIME"] і його можна централізовано включити / відключити через панель управління.

Керований кеш - відрізняється від попереднього тим, що оновлюється в момент зміни даних в Інфоблоки. Для його роботи необхідно визначення константи define ( "BX_COMP_MANAGED_CACHE", true); в dbconn.php.

Некерований кеш - кешування реалізоване розробниками компонентів для Бітрікс, залежить від переданих параметрів і часу життя кеша.

HTML кеш - кешування цілої сторінки. Має сенс включати для рідко оновлюються сторінок.

Кешування меню - має власний алгоритм кешування. Кеш керований, оновлюється при редагуванні меню або зміні прав доступу до файлів і папок.

Проблема з продуктивністю при створенні кеша

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

Подібна ситуація може виникнути, наприклад, у інтернет-магазину - велике число розділів і карток товару. Рішенням даної проблеми може стати генерація кеша для сторінок за розкладом, замість генерації на хіті користувача. Завдяки цьому, навіть вперше зайшов на сайт відвідувач, побачить закеширувалася версію.

Механізм примусового створення кеша

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

В даному прикладі ми використовуємо стандартний клас для роботи з кешем. Метод InitCache перевіряє наявність кеша відповідно до своїх параметрами. Якщо кеш є, то вона поверне true. в іншому випадку - false. Параметри функції в порядку передачі: час життя в секундах, унікальний ідентифікатор кеша, папка в якій зберігається кеш (щодо базової папки), базова папка зберігання кеша. За замовчуванням базова папка зберігання кеша cache, але для того щоб не шлях наш кеш і кеш Бітрікс, ми розміщуємо його в окремій папці. Папка з кешем знаходиться в каталозі / bitrix /. отже весь наш кеш буде лежати в папці / bitrix / mycache /

Тепер перейдемо до скрипту який робить кеш для сторінок. Припустимо у нас є інфоблок з розділами і ми хочемо зробити кеш сторінки кожного з цих розділів. Вміст кожного розділу відрізняється. Основна частина скрипта буде виглядати наступним чином:

Далі нам потрібно розмістити даний код файлі, який буде викликатися за розкладом через cron. Після його запуску, ми отримаємо в розділі / bitrix / mycache / файли з готовим кешем, який буде використовувати наш компонент.

Схожі статті