Загрузка страницы..
Пример использования кеширования в 1С-Битрикс
D7-аналоги кеширование в 1С-Битрикс
Пример использования кеширования в 1С-Битрикс
2021-12-24T14:12 24 дек 2021 14:12
Просмотров: 5333

Для кеширования в 1С-Битрикс есть новый класс Bitrix\Main\Data\Cache почти ничем не отличается в обращении от старого CPHPCache .

Пример старого API:

$cache = new \CPHPCache();
if ($cache->InitCache($cacheTime, $cacheId, $cacheDir))
{
    $result = $cache->GetVars();
}
elseif($cache->StartDataCache())
{
    $result = array();
    // ...
    if ($isInvalid)
    {
        $cache->AbortDataCache();
    }
    // ...
    $cache->EndDataCache($result);
}

Пример API D7:

$cache = \Bitrix\Main\Data\Cache::createInstance();
if ($cache->initCache($cacheTime, $cacheId, $cacheDir))
{
    $result = $cache->getVars();
}
elseif ($cache->startDataCache())
{
    $result = array();
    // ...
    if ($isInvalid)
    {
        $cache->abortDataCache();
    }
    // ...
    $cache->endDataCache($result);
}

Пример тегированного кеша на D7:

$cacheManager = \Bitrix\Main\Application::getInstance()->getTaggedCache();
$cacheManager->startTagCache('/path_cache');
$cacheManager->registerTag('tag');
$cacheManager->endTagCache();
		
//Очистить по тегу
//$cacheManager->clearByTag('tag');


Пример кеша с тегированием

$iblockId = (int)IBLOCK_PRODUCTS;

$cache = \Bitrix\Main\Data\Cache::createInstance();
$cacheDir = '/' . SITE_ID . '/iblock/' . $iblockId;
if ($cache->initCache(36000, 'sections', $cacheDir)) {
	$sections = $cache->getVars();
} elseif ($cache->startDataCache()) {

	$cacheManager = \Bitrix\Main\Application::getInstance()->getTaggedCache();
	$cacheManager->startTagCache($cacheDir);
	$cacheManager->registerTag('iblock_id_' . $iblockId);

	$res = CIBlockSection::GetList(
		['SORT' => 'ASC', 'NAME' => 'DESC'],
		['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y', 'DEPTH_LEVEL' => 1],
		false,
		[
			'ID',
			'IBLOCK_ID',
			'NAME',
			'SORT',
			'IBLOCK_SECTION_ID',
			'SECTION_PAGE_URL',
			'UF_FOOTER_MENU'
		]
	);

	while ($item = $res->GetNext()) {
		$sections[$item['ID']] = $item;
	}

	if (!$sections) {
		$cache->abortDataCache();
		$cacheManager->abortTagCache();
	}

	$cacheManager->endTagCache();

	$cache->endDataCache($sections);
}


Комментарии: 0

Комментарий пока нет, стань первым!

Добавить комментарий

up
Яндекс.Метрика Яндекс.Метрик