Битрикс отключает кеш страниц

Обновлено: 21.11.2024

Обратившись ко мне, вы получите надежного и грамотного подрядчика, который быстро и качественно выполнит любую задачу для вас и вашего бизнеса.

Последние заметки

Все англоязычные материалы переведены полностью автоматически с помощью сервиса Google

Очистка кеша модулей Битрикс

Нередко при разработке в Битрикс24 фрагменты кода остаются удаленными, но сохраняются с помощью кеша. Например, последние разговоры или список последних групп. В этом случае достаточно просто избавиться от них, выполнив команду:

Очистка кеша компонента

Если во время разработки вам нужно программно очистить кеш компонента, то вы можете использовать функцию OnBeforeIBlockElementUpdate в init.php

Кэшировать вывод инфоблока

Сделать легкий кешированный вывод элементов инфоблока

Обновление значения кэшированной переменной

Быстрым и не совсем элегантным решением для обновления переменной в кэшированном компоненте/шаблоне является добавление кода в component_epilog.php

Два разных типа кэширования компонентов

В большинстве стандартных компонентов Битрикс используется одновременное кэширование массива $arResult и html-кода. Однако при написании собственных компонентов это не всегда удобно, часто бывает, что нужно выполнять какой-то код в шаблоне при каждом попадании, поэтому лучше кэшировать только данные в $arResult. Ниже я привел 2 примера кэширования (для component.php) — с кэшированием html кода и без. Обратите внимание, что во втором варианте шаблон подключается после блока кэширования, а его место занимает $this->EndResultCache().

Кэширование $arResult и html-кода шаблона:

Кэшировать только $arResult:

Добавить данные в кеш из шаблона для использования в component_epilog.php

Component_epilog.php — это файл, который запускается после рендеринга шаблона и не кэшируется, т. е. он запускается независимо от того, был ли показан вновь сгенерированный html-код из шаблона или выводился из кеша. Соответственно, мы можем использовать этот файл для выполнения каких-то действий при каждом хите, даже, например, для отображения html-кода выше на странице с помощью отложенных функций. Но данные, доступные в component_epilog.php, как правило, весьма ограничены в компонентах, использующих кэширование html. В этом примере я покажу как расширить список этих данных, для этого вставим следующий код в файл result_modifier.php в шаблоне компонента (Например, используется ключ "ITEMS" в массиве $arResult , содержащий главный компонент в массиве данных "bitrix:news.list"):

Запись $arResult родительского сложного компонента из шаблона

Иногда в файлах шаблонов сложного компонента (не имеющих собственного кеша) удобно иметь какие-то данные из используемых в них обычных (несложных) компонентов. Пример: после подключения компонента catalog.section.list, в соответствии со структурой html-кода, предоставленной верстальщиком, нам необходим доступ к некоторым полям раздела в шаблоне сложного компонента. Чтобы избежать дополнительных запросов к базе данных и связанного с ними неизбежного кэширования или переподключения компонента catalog.section.list, сделаем следующее:

Добавим все необходимые данные в кеш компонента, например, с помощью файла result_modifier.php добавим массив $arResult["SECTION"]

В файле component_epilog.php получите объект родительского компонента, если он доступен, и используйте его свойство arResult для записи значения

В шаблоне сложного компонента значение будет доступно в переменной $ arResult

Кешируем данные в $arResult вместо html-кода в штатных компонентах (из шаблона)

Если вам нужно произвести какие-то манипуляции с данными после создания кеша (например, сортировка списка офисов по удаленности от текущего местоположения), то обычное кеширование html-кода в компоненте news.list не будет работай. Чтобы кэшировать данные в $arResult, а не сгенерированный html код, можно сделать следующее:

Используйте файл result_modifier.php, чтобы добавить массив $ arResult ["ITEMS"]

Сам вывод шаблона будет размещен не в template.php, а в component_epilog.php (в этом случае даже после создания кеша у нас будет доступ к массиву $arResult["ITEMS"]).

Избавление от сообщения «Не удается найти шаблон со страницей»

Это загадочное сообщение генерируется, если указанный шаблон не был найден при подключении компонента. Однако бывают случаи (хотя и довольно экзотические), когда это сообщение может быть неуместным. Чтобы при отсутствии шаблона компонент не выводил это сообщение, а возвращал false, включаем шаблон внутрь компонента вместо стандартного "$this->IncludeComponentTemplate();" следующим образом

Кэширование

Кэширование – это технология, позволяющая кэшировать результаты редко обновляемых и ресурсоемких областей кода (например, тех, которые обрабатывают базу данных).

    - используется для кэширования HTML; - используется для кэширования переменных HTML и PHP.

Результаты кэширования сохраняются в виде файлов в каталоге /bitrix/cache/. Если срок действия кеша не истек, вместо потребляющего ресурсы кода включается предварительно созданный файл кеша.

Правильное использование кеша позволяет значительно повысить общую эффективность сайта. Однако следует учитывать, что неразумное использование кэширования может привести к серьезному увеличению размера каталога /bitrix/cache/.

Пример кэширования HTML


"; endif; // записываем предварительно буферизованный вывод в файл кеша $obCache->EndDataCache(); endif; ?>

В этом примере метод CPageCache::StartDataCache проверяет наличие действительного и не просроченного файла кеша. Если такой файл существует, он включается и отображается, в противном случае включается буферизация. Буферизованный вывод записывается в файл кеша с помощью метода CPageCache::EndDataCache.

Первый параметр метода CPageCache::StartDataCache указывает интервал времени в секундах, в течение которого файл кеша действителен и не истек (интервал отсчитывается от времени создания файла кеша).

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

  • Если текущая авторизация пользователя может повлиять на результат выполнения кэшированного кода, результат выполнения функции CUser::GetUserGroupString должен быть добавлен к идентификатору. Этот метод возвращает строку, содержащую идентификатор текущей группы пользователей.
  • Если вы используете постраничную навигацию в кэшированном коде, возвращаемое значение CDBResult::NavStringForCache необходимо добавить к этому идентификатору.
  • Следует иметь в виду, что при использовании сортировки порядок сортировки и значения переменных, содержащих поле сортировки, должны быть включены в этот идентификатор.

Пример кэширования переменных HTML и PHP


"; endif; // записываем предварительно буферизованный вывод в файл кеша // вместе с дополнительной переменной $obCache->EndDataCache(array("SECTION_TITLE" => $SECTION_TITLE )); endif; ? >

Этот пример отличается от предыдущего кэшированием переменной PHP $SECTION_TITLE в дополнение к коду HTML. Структура и тип кэшируемых переменных PHP произвольны. Метод CPHPCache::InitCache проверяет, существует ли действительный и неистекший файл кэша. Если этот файл найден, он включается; все кэшированные переменные доступны после возврата метода CPHPCache::GetVars. Метод CPHPCache::EndDataCache записывает переменные PHP и буферизованный код HTML в файл кеша.

Внимание!
Чтобы отключить кеширование для отдельной страницы, вам необходимо авторизоваться с правами администратора и открыть эту страницу с параметром &clear_cache=Y. Вызов страницы с параметром &clear_cache_session=Y после авторизации отключит кеширование для всех страниц сессии. Файлы кэша можно удалить в административном разделе на странице настроек модуля «Ядро».

Эта ситуация. Научитесь делать сайт на Битрикс. Настройте эту демо-версию стандартной версии, и все было в порядке. Ставлю демо редакцию "малого бизнеса" и вот что происходит: редактирую таблицу стилей или php, сохраняю, обновляю страницу сайта в браузере, а он показывает, что после редактирования ничего не изменилось, хотя файлы все обновились. смените шаблон сайта на другой, потом снова поставьте свой, только тогда изменения вступят в силу. как быть? как построить? чтобы не переставлять шаблоны постоянно, чтобы увидеть результаты редактирования?

обновление: сброс кэша cms не помогает

  • 0 Как привязать dnsmasq-dhcp к внешним DNS-именам?
  • 2 Проблемы с кодировкой при записи данных в базу данных (php). Как исправить?
  • 5 Есть ли книги по психологии цвета в дизайне?
  • 1 Как правильно называть вкладку в приложении для Android?
  • 2 Как сделать блок с закрытием кнопки, тип уведомления?
  • 0 Как показать тело запроса в отладочной информации в Curl PHP?
  • 0 Как зарегистрировать удаленный сервер OPC?
  • 0 Как повернуть текст в нижнем колонтитуле (ITextRenderer (Flying Saucer))?

Тем не менее, это, вероятно, кеш.
Вы не указали, что было выпущено. Это может быть кеш браузера, веб-сервер, управляемая и составная Keshi cms. Скорее всего в вашем случае нужно сбросить кеш cms.

сбросил кеш cms через кнопку в админке - прокомментировал Merlin_Ziemann 04.09.19 в 16:13

Ctrl+F5 еще одна попытка. Еще почистить кеш в настройках попробуй - прокомментировал Brooks_Hahn 04.09.19 в 16:16

Во время разработки я бы посоветовал отключить весь кеш в Битриксе. Далее для просмотра изменений стилей и js используйте chrome. Откройте консоль, вкладку «Сеть» и поставьте галочку на «Отключить кеш».

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

Читайте также: