Заказать проект
Оставьте заявку для получения коммерческого предложения.
Заполните форму и мы вышлем Вам предложение в котором решим,
чем можем вам помочь.
Автокеширование данных в 1С Bitrix

Автокеширование данных в 1С Bitrix

16 Апреля 2018
Олег Кравпа
Junior Back End Developer
Олег  Кравпа
следующая статья

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

Чтобы исправить эту проблему, нужно настроить автокеширование. Нужное для ускорения загрузки страниц сайта и уменьшения количества запросов к базе данных, также если в компоненте есть участки кода в котором производятся  сложные вычисления то кэширование позволяет уменьшить нагрузку на процессор и память.

В Битрикс есть понятный интерфейс для управления автокешированием. Он располагается в административной панели. Путь: Настройки -> Настройки продукта -> автокеширование.



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

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

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



Очистить кэш компонентов страницы можно с помощью кнопки «Сбросить кэш» на панели инструментов.








Чтобы очистить кэша на всех страницах сайта нужно в административном разделе сайта перейти в «Настройки->Настройки продукта->Автокеширование»  закладка «очистка файлов кэша».

Все файлы кэша хранятся в папке /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 минут
laptop
Мы свяжемся с вами в течении 10 минут