Автокешування даних в 1С Бітрікс

16 Квітня 2018

наступна стаття
Олег Кравпа

Junior Back End Developer

Олег  Кравпа
Автокешування даних в 1С Бітрікс

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

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

У Бітрікс є зрозумілий інтерфейс для управління автокешуванням. Він знаходиться в адміністративній панелі. Шлях: Налаштування —> Налаштування продукту —> Автокешування.


Автокешування — найпростіший варіант залучити всі компоненти, в яких підтримується кешування. Перед впровадженням потрібно впевнитися, що в компоненті встановлені відповідні налаштування. Сторінка сайту складається з набору компонентів. Кожен компонент повинен бути закешований, якщо це не суперечить його логіці роботи. Це дуже важливо для «важких» компонентів, які будують великі запити до бази даних і займаються їх оперуванням в довгостроковій перспективі. Наприклад, в інтернет-магазині є компонент «Каталог товарів». Дані в ньому оновлюються рідко, кешування дозволить помітно прискорити його роботу.

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

Для початку роботи автокешування потрібно встановити значення «Авто + Кероване» в поле «Тип кешування». А в полі «Час кешування» потрібно вказати максимально допустиме значення часу в секундах. Після включення режиму, компоненти з настройками «Авто + Кероване» будуть переведені в режим роботи з кешуванням.

Суть роботи автокешування в тому, що всі динамічні компоненти, які використовуються для веб-сторінок, отримали вбудовану підтримку управління кешуванням. Для використання цієї технології не технічному фахівцеві досить включити автокешування однією кнопкою в адміністративній частині сайту. Після цього всі компоненти, у яких був включений режим роботи «Авто + Кероване», створять кеші і повністю перейдуть в режим роботи без запитів до бази даних.



Очистити кеш компонентів сторінки можна за допомогою кнопки «Скинути кеш» на панелі інструментів.








Щоб очистити кеш на всіх сторінках сайту, потрібно в адміністративному розділі сайту перейти в «Налаштування —> Налаштування продукту —> Автокешування» закладка «Очищення файлів кешу».

Щоб очистити кеш на всіх сторінках сайту, потрібно в адміністративному розділі сайту перейти в «Налаштування —> Налаштування продукту —> Автокешування» закладка «Очищення файлів кешу».

Всі файли кешу зберігаються в теці / 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 хвилин