Система Битрикс включает в себя разные технологии кэширования. Кэширование позволяет уменьшить нагрузку на аппаратные ресурсы (за исключением файловой системы разумеется), таким образом влияя на время отклика сайта. Как правило, кэширование используется как в стандартных компонентах системы, так и в компонентах, разработанных под свои нужды. Результаты ресурсоемких, а так же редко обновляемых кусков кода заносятся в кэш, при повторном запросе, готовый результат может выдаваться из кэша, и при больших нагрузках на сайт прирост производительности за счет кэширования становиться очевидным. Сделать кэширование должным образом — дело ювелирное, но отчаиваться не стоит — всё приходит с опытом.
По умолчанию для кэширования в Битрикс-е созданы два класса, это CPageCache и CPHPCache. Первый служит для кеширования HTML, второй для кэширования HTML и PHP переменных.
Файлы кэша записываются в каталог /bitrix/cache/. Если время кэширования не истекло, то вместо ресурсоемкого кода будет подключен предварительно созданный файл кэша. Стоит заметить, что неразумное использование кэширования может привести к значительному увеличению размера каталога с файлами кэша.
HTML кэширование:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | # создаем объект $obCache = new CPageCache; # время кеширования в секундах $lifeTime = 30*60; # формируем ID кеша в зависимости от всех параметров # которые могут повлиять на результирующий HTML $cacheID = $arParams [ 'ELEMENT_ID' ]. $arParams [ 'IBLOCK_TYPE' ]; # инициализируем буферизирование вывода if ( $obCache ->StartDataCache( $lifeTime , $cacheID , "/" )){ # # Сюда помещается ресурсоёмкий код, с выводом результата # # записываем предварительно буферизированный вывод в файл кеша $obCache ->EndDataCache(); } |
Кэширование HTML и PHP переменных:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | # создаем объект $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 )); } |