партнер компании 1с-битрикс
сайт фрилансера Сергея Эстрина
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
Простой адаптивный форум - модуль для битрикс
В данной статье я не буду описывать всю технологию, ибо документация по ней присутствует, а отмечу только те моменты, с которыми, по моему мнению, могут возникнуть трудности или непонимание на начальном этапе.

Голосование компонентов

Наверно вы уже видели в шаблонах разных компонентов такую строку:
$this->setFrameMode(true);
Так вот, данная функция ничего не включает и не отключает, она только "ГОЛОСУЕТ" за или против использования композитного кеширования на странице, где находится компонент. Это значит, что если в зависимости от настройки композитного режима в админке, а именно опции "Голосование шаблона компонента по умолчанию" (может быть "За" или "Против") и учета голосов всех компонентов на странице, композитный режим кеширования на данной странице будет включен или выключен. При этом, если в админке по умолчанию установлено "Против", то чтобы композитный режим был включен, за него явно должны проголосовать все компоненты.

Динамические области внутри шаблонов компонентов

Динамические области, т.е. те фрагменты html-кода, которые будут подгружены аяксом после загрузки закешированной страницы, выделяются в шаблоне компонента при помощи $this->createFrame()->begin(). При этом, есть несколько вариантов их использования, в зависимости от указания параметров как у createFrame, так и у begin.

В первом параметре createFrame указывается DOM идентификатор контейнера, в который будет подгружена динамическая область область после загрузки закешированной странице. При этом во втором параметре следует указать false.
<li id="my_container">
   <?$frame = $this->createFrame("my_container", false)->begin();?>
      <?if($USER->IsAuthorized()):?>
         <a href="<?=$arResult["USER"]["PROFILE_URL"]?>"><?=$arResult["USER"]["NAME"]?></a>
      <?else:?>
         <a href="<?=$arResult["AUTH_URL"]?>">Войти</a>
      <?endif?>
   <?$frame->beginStub()?>
      Загрузка...
   <?$frame->end();?>
</li>
При этом после $frame->beginStub() указывается html-код "заглушки", т.е. тот html, который будет показан до того, как будет подгружена динамическая область. $frame->beginStub() указывать необязательно, можно указать html код заглушки в первом параметре функции begin (а если заглушка не нужна, то в этом параметре при отсутствии $frame->beginStub() следует указывать пустую строку):
<li id="my_container">
    <?$frame = $this->createFrame("my_container", false)->begin("Загрузка...");?>
        <?if($USER->IsAuthorized()):?>
            <a href="<?=$arResult["USER"]["PROFILE_URL"]?>"><?=$arResult["USER"]["NAME"]?></a>
        <?else:?>
            <a href="<?=$arResult["AUTH_URL"]?>">Войти</a>
        <?endif?>
    <?$frame->end();?>
</li>

Отмена композитного кеширования

Отменить композитное кеширование в любом месте страницы можно с помощью следующей инструкции:
\Bitrix\Main\Data\StaticHtmlCache::getInstance()->markNonCacheable();

Тестирование


О том что композитный кеш на странице работает (точнее, что страница загружена из композитного кеша) можно судить одним из двух способов:
  1. По наличию ссылки "Быстро с 1С-Битрикс", которая появится внизу страницы, если соответствующая ссылка разрешена в настройках композитного кеша (позицией данной кнопки на странице также можно управлять с помощью специального div-контейнера).
  2. С помощью расширения "Bitrix Composite Notifier" для браузера "Google Chrome". Если страница идет из композитного кеша, иконка расширения становится цветной вместо серой, и при нажатии на иконку будет отображаться дополнительная информация.
Имейте в виду, что для того, чтобы страница начала отображаться из кеша, как правило нужно перезагрузить страницу 2 раза после первого ее открытия.

Для отладки можно включить лог композитного кеша. Если, например, какой-то компонент голосует против композитного кеша, записи в логе помогут определить какой и т.д. Включить лог можно так:
define( "BX_COMPOSITE_DEBUG", true );
define( "LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/upload/composite_log.txt" );

Сброс кеша при помощи api

Сброс композитного кеша вручную производится на той же странице админки "Настройки кеширования", на которой производится сброс орбычного (не коспозитного кеша). А вот у удалениея кеша при помощи api существуют некоторые особенности.

Если необходимо удалять кеш по расписанию, то не рекомендуется просто удалять содержимое папки "/bitrix/html_pages/домен/". Хотя можно поступить и так, удалив при этом также содержимое файла "/bitrix/html_pages/.enabled", но в этом нет необходимости, т.к. в системе уже существует специально созданный файл "/bitrix/modules/main/tools/cron_html_pages.php", запуск которого можно осуществлять из под крона. Например, следующая команда запустит удаление файлов композитного кеша, которые были созданы ранее чем 10 часов назад:
php -f  /path/to/site/bitrix/modules/main/tools/cron_html_pages.php 10
Также можно удалить композитный кеш при помощи api:
$staticHtmlCache = \Bitrix\Main\Data\StaticHtmlCache::getInstance();
$staticHtmlCache->deleteAll();

Чтобы оставить сообщение, авторизуйтесь, или войдите с помощью:
Главная   ·   Модули для 1С-Битрикс   ·   Типовые услуги   ·   Форум   ·   Блог   ·   Контакты
Рейтинг@Mail.ru