Автокешування даних в 1С Бітрікс
16 Квітня 2018
наступна статтяВеликі інтернет-магазини і веб-портали часто стикаються з проблемою перевантаження сервера. Через виконання великої кількості одночасних запитів до бази даних від користувачів, сайт довго відкривається і гальмує. Швидкість його відкриття впливає на безліч показників, в тому числі на пошукову видачу і конверсію.
Щоб виправити цю проблему, потрібно налаштувати автокешування. Потрібне для прискорення завантаження сторінок сайту і зменшення кількості запитів до бази даних, також якщо в компоненті є ділянки коду, в яких виконуються складні обчислення, то кешування дозволяє зменшити навантаження на процесор і пам'ять.
У Бітрікс є зрозумілий інтерфейс для управління автокешуванням. Він знаходиться в адміністративній панелі. Шлях: Налаштування —> Налаштування продукту —> Автокешування.
Автокешування — найпростіший варіант залучити всі компоненти, в яких підтримується кешування. Перед впровадженням потрібно впевнитися, що в компоненті встановлені відповідні налаштування. Сторінка сайту складається з набору компонентів. Кожен компонент повинен бути закешований, якщо це не суперечить його логіці роботи. Це дуже важливо для «важких» компонентів, які будують великі запити до бази даних і займаються їх оперуванням в довгостроковій перспективі. Наприклад, в інтернет-магазині є компонент «Каталог товарів». Дані в ньому оновлюються рідко, кешування дозволить помітно прискорити його роботу.
Налаштування компонента, які відповідають за кешування, представлені нижче на зображенні.
Для початку роботи автокешування потрібно встановити значення «Авто + Кероване» в поле «Тип кешування». А в полі «Час кешування» потрібно вказати максимально допустиме значення часу в секундах. Після включення режиму, компоненти з настройками «Авто + Кероване» будуть переведені в режим роботи з кешуванням.
Суть роботи автокешування в тому, що всі динамічні компоненти, які використовуються для веб-сторінок, отримали вбудовану підтримку управління кешуванням. Для використання цієї технології не технічному фахівцеві досить включити автокешування однією кнопкою в адміністративній частині сайту. Після цього всі компоненти, у яких був включений режим роботи «Авто + Кероване», створять кеші і повністю перейдуть в режим роботи без запитів до бази даних.
Очистити кеш компонентів сторінки можна за допомогою кнопки «Скинути кеш» на панелі інструментів.
Щоб очистити кеш на всіх сторінках сайту, потрібно в адміністративному розділі сайту перейти в «Налаштування —> Налаштування продукту —> Автокешування» закладка «Очищення файлів кешу».
Щоб очистити кеш на всіх сторінках сайту, потрібно в адміністративному розділі сайту перейти в «Налаштування —> Налаштування продукту —> Автокешування» закладка «Очищення файлів кешу».
Всі файли кешу зберігаються в теці / bitrix / chache. Очистити кеш будь-якого компонента можна знаючи такі параметри як ID сайту, ім'я компонента, ім'я шаблону компонента, параметри компонента і інші зовнішні умови, наприклад, список груп, до яких належить поточний користувач. Інакше він буде скинутий після закінчення часу кешування.
З виходом головного модуля 9.1.0 в Бітрікс з'явилася підтримка тегів кешу. Кеш можна позначати і скидати тегами. Якщо включений режим «Керований кеш», то скидання кешу компонентів інфоблоків відбувається при зміні інформації в них. Не варто забувати, що очищення кешу для інфоблоку викликається методом Add/Update/Delete. Якщо використовувати метод SetPropertyValueCode, то очищення не відбудеться.
Кешування в компонентах досить часта операція, тому інтерфейс для кешування інтуїтивно простий. Для того щоб закешувати код, досить включити його в конструкцію виду:
if ($this->StartResultCache()) { //Код, що кешується }
За замовчуванням: кеш залежить від набору вхідних параметрів. Для певного набору параметрів генерується свій кеш і, якщо параметри змінюються, то кеш формується саме для цього набору параметрів. Час для кешу буде виходити з параметра компонента CACHE_TIME. Його можна змінити в коді компонента, передавши значення часу в функцію StartResultCache().
Щоб кеш був залежний від додаткових параметрів, в функцію StartResultCache, його потрібно додати другим параметром. Наприклад, потрібно додати залежність кешу від групи користувача, функція кешування матиме такий вигляд:
global $USER; if ($this->StartResultCache( false, $USER->GetUserGroupString() )) { //Код, що кешується }
Важливо: за замовчуванням автокешування зберігає тільки html вивід, тому всередину зашифрованої області потрібно додати код виклику шаблону:
global $USER; if ($this->StartResultCache( false, $USER->GetUserGroupString() )) { //Код, що кешується $this->IncludeComponentTemplate(); }
Крім HTML, в кеші можна зберігати додаткові дані. Для цього потрібно використовувати метод SetResultCacheKeys(). Після цього передати масив ключів, які містяться в змінній $arResult. Наприклад, потрібно зберегти в кеш назву товару, тоді пишемо наступну конструкцію:
global $USER; if ($this->StartResultCache( false, $USER->GetUserGroupString() )) { //Код, що кешується $this->SetResultCacheKeys(array('NAME')); $this->IncludeComponentTemplate(); }
Щоб не закешувати помилкові дані, їх потрібно перевіряти. Якщо виникне помилка, потрібно скинути автокешування, інакше в кеш потрапляють помилкові дані і протягом його «життя» користувачі будуть бачити невірну інформацію. Для скидання кешу потрібно використовувати наступну конструкцію:
global $USER; if ($this->StartResultCache( false, $USER->GetUserGroupString() )) { //Код, що кешується if ($productNotFound) { $this->AbortResultCache(); return; } $this->SetResultCacheKeys(array('NAME')); $this->IncludeComponentTemplate(); }
Дані при закешованому компоненті передаються з кешу. Код, написаний всередині блоку і файлів шаблону, виконуватися не буде. Відкладені функції всередині шаблону компонента теж не працюватимуть.
Короткий список відкладених функцій:
CMain::ShowTitle, CMain::ShowCSS, CMain::ShowNavChain, CMain::ShowProperty, CMain::ShowMeta, CMain::ShowPanel
Тому, ніколи не використовуйте відкладені функції в шаблоні компонента. Якщо все ж потрібно з ними працювати, то у файлі шаблону component_epilog.php, код не кешується.
Автокешування — важлива частина фреймворка 1С Бітрікс. Воно економить час розробників і користувачів. Якщо компоненти налаштовані правильно, то для включення автокешування досить натиснути одну кнопку в панелі управління сайтом.
Потрібно розуміти, що сучасні процесорні технології досягли піку частоти одного ядра. Коли один запит виконується на одному ядрі процесора, то немає можливості прискорити виконання запиту в два рази. Тому кешування дозволяє скоротити завантаження сервера бази даних і прискорити роботу сайту.
Ми зв'яжемось з Вами протягом 10 хвилин