23  /  26

Работа с кешем

Просмотров: 52763
Дата последнего изменения: 19.08.2021
Роберт Басыров
Сложность урока:
2 уровень - несложные понятия и действия, но не расслабляйтесь.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет

Сброс кеша

Если возникла потребность сбросить кеш, то рекомендуется это сделать с помощью ссылки Сбросить кеш на странице настроек.

При изменении шаблона сайта рекомендуется сбрасывать уже созданный композитный кеш. Это можно сделать с помощью запуска агентов из cron. Создан специальный файл cron_html_pages.php, который надо запустить. Он лежит по адресу: www/bitrix/modules/main/tools/cron_html_pages.php.

Пример команды, которая удалит все файлы кеша, созданные ранее чем 10 часов назад:
php -f  /path/to/site/bitrix/modules/main/tools/cron_html_pages.php 10

Не рекомендуется сброс кеша вручную путём удаления папки с кешем страниц /bitrix/html_pages/<domain>/. В этом случае возможна ситуация, когда кеш перестанет создаваться, если до сброса кеша произошло превышение квоты на композитный кеш. По логу эту ошибку отследить не удастся. Если всё же вы прибегаете к этой операции, то одновременно с этим очистите содержимого файла bitrix/html_pages/.enabled, чтобы сбросить статистику.

Сброс с помощью API

Для сброса кеша с помощью API необходимо использовать метод \Bitrix\Main\Data\StaticHtmlCache:

$staticHtmlCache = \Bitrix\Main\Data\StaticHtmlCache::getInstance();
$staticHtmlCache->deleteAll();

Указание времени жизни

Если вызвать метод setAutoUpdate(false), то на странице не будет аяксового хита вообще. В этом случае setAutoUpdateTTL позволяет указать время сброса кеша. Этот способ - аналог настроек в админке, только для конкретной страницы.

Кеш браузера и SQL-база

Пример использования рассмотрим на примере шаблона компонента Корзина. Код разметки аналогичен первому варианту разметки шаблона компонента Авторизация, но дополнительно указано методом setBrowserStorage использование браузера как локального хранилища динамичного контента. Это нужно в случаях когда пользователь уже ходил по интернет-магазину, и положил в корзину какое-то число товаров. В этом случае при загрузке страницы система будет использовать кеш браузера и отобразит последнее число товаров этого пользователя до момента получения актуальных данных с веб-сервера.

Данные в локальном хранилище:

Контент динамических областей пишется в SQL-базу. Но не по умолчанию, а по указанию:

$frame = $this->createFrame()->begin();
$frame->setBrowserStorage(true);

Примечание: Использование SQL базы не будет работать в Internet Explorer и Firefox, т.к. эти браузеры не поддерживают SQLite. Так как ситуация с браузерами меняется, то советуем ситуацию с поддержкой отслеживать постоянно.

Полное кеширование шаблона компонента

Если необходимо, чтобы кешировался весь контент шаблона и потом обновлялся, то необходимо весь код шаблона вставить в $this->createFrame()->begin();. В таком случае вся информация будет кешироваться и затем обновляться на втором хите:

$frame = $this->createFrame()->begin();
      // статический и динамический контент
$frame->end();

Отмена композита в любом месте страницы

\Bitrix\Main\Data\StaticHtmlCache::getInstance()->markNonCacheable();
14
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии