Система Битрикс включает в себя разные технологии кэширования. Кэширование позволяет уменьшить нагрузку на аппаратные ресурсы (за исключением файловой системы разумеется), таким образом влияя на время отклика сайта. Как правило, кэширование используется как в стандартных компонентах системы, так и в компонентах, разработанных под свои нужды. Результаты ресурсоемких, а так же редко обновляемых кусков кода заносятся в кэш, при повторном запросе, готовый результат может выдаваться из кэша, и при больших нагрузках на сайт прирост производительности за счет кэширования становиться очевидным. Сделать кэширование должным образом — дело ювелирное, но отчаиваться не стоит — всё приходит с опытом.
По умолчанию для кэширования в Битрикс-е созданы два класса, это CPageCache и CPHPCache. Первый служит для кеширования HTML, второй для кэширования HTML и PHP переменных.
Файлы кэша записываются в каталог /bitrix/cache/. Если время кэширования не истекло, то вместо ресурсоемкого кода будет подключен предварительно созданный файл кэша. Стоит заметить, что неразумное использование кэширования может привести к значительному увеличению размера каталога с файлами кэша.
HTML кэширование:
# создаем объект $obCache = new CPageCache; # время кеширования в секундах $lifeTime = 30*60; # формируем ID кеша в зависимости от всех параметров # которые могут повлиять на результирующий HTML $cacheID = $arParams['ELEMENT_ID'].$arParams['IBLOCK_TYPE']; # инициализируем буферизирование вывода if($obCache->StartDataCache($lifeTime, $cacheID, "/")){ # # Сюда помещается ресурсоёмкий код, с выводом результата # # записываем предварительно буферизированный вывод в файл кеша $obCache->EndDataCache(); }
Кэширование HTML и PHP переменных:
# создаем объект $obCache = new CPHPCache; # время кеширования в секундах $lifeTime = 30*60; # формируем идентификатор кеша в зависимости от всех параметров # которые могут повлиять на результирующий HTML $cacheID = $arParams['ELEMENT_ID'].$arParams['SECTION_ID']; # если кеш есть и он ещё не истек то if($obCache->InitCache($lifeTime, $cacheID, "/")){ # получаем закешированные переменные $vars = $obCache->GetVars(); $SECTION_TITLE = $vars["SECTION_TITLE"]; } else { # иначе обращаемся к базе $arSection = GetIBlockSection($arParams['SECTION_ID']); $SECTION_TITLE = $arSection["NAME"]; } # добавляем пункт меню в навигационную цепочку $APPLICATION->AddChainItem($SECTION_TITLE, $SECTION_URL."SECTION_ID=".$arParams['SECTION_ID']); # начинаем буферизирование вывода if($obCache->StartDataCache()){ # выбираем из базы параметры элемента инфоблока if($arIBlockElement = GetIBlockElement($arParams['ELEMENT_ID'], $IBLOCK_TYPE)){ echo "<pre>"; print_r($arIBlockElement); echo "</pre>"; } # записываем предварительно буферизированный вывод в файл кеша # вместе с дополнительной переменной $obCache->EndDataCache(array( "SECTION_TITLE" => $SECTION_TITLE )); }