barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

среда, 17 августа 2011 г.

Кэширование данных в компонентах 1С-Битрикс

Иногда бывает необходимо закэшировать какие-нибудь данные (а не html), например, результат работы логики компонента, т.е. массив $arResult. Ниже приведен пример использования средств кэширования 1С-Битрикс, имеющий следующие особенности:
  • используется 1С-Битрикс-класс CPHPCache
  • управление кэшированием ведется через стандартные параметры компонента CACHE_TYPE и CACHE_TIME (кэширование включается, когда тип кэширования установлен в "Авто+Управляемое", что соответствует значению 'A' в коде включения компонента)
  • кэш зависит от всех параметров массива $_GET 
  • кэш хранится в папке /bitrix/cache/my_component_name/

$useCache = ($arParams["CACHE_TYPE"] == 'A');
$cacheValid = false;

if($useCache)
	{
	$cachedResult = new CPHPCache();

	$cacheId = "";
	foreach($_GET as $key => $val)
		$cacheId.=$key.$val;

	$cacheValid = $cachedResult->InitCache(intval($arParams["CACHE_TIME"]), $cacheId, "/my_component_name");

	if($cacheValid)
		$arResult = $cachedResult->GetVars();
	}

if(!$useCache || !$cacheValid) // либо кэш отключен, либо нет действительного кэша
	{
	/*
	* Тут заполняется массив $arResult и формируется флаг $success, равный true,
	* если результат сформирован успешно или false, если возникла ошибка и кэшировать
	* результат не имеет смысла
	*/

	if($success && $useCache)
		{
		// сохранить в кэше массив $arResult
		$cachedResult->StartDataCache();
		$cachedResult->EndDataCache($arResult);
		}
	}



2 комментария:

  1. Здравствуйте!

    Интересует сотрудничество. Берете ли вы задачи на аутсорс?

    Заранее спасибо!

    ОтветитьУдалить
    Ответы
    1. Добрый вечер!

      Спасибо за предложение, но подработка меня на данный момент не интересует.

      Удалить