Перейти к основному содержимому

Полностраничный кэш (Выходной кэш)

Обзор

Full Page Cache

Настройка полностраничного кэша

Пожалуйста, обратите внимание
Полный кэш страниц по умолчанию отключен, если вы вошли в систему через интерфейс администратора или в случае, если включен режим отладки ('APP_ENV=dev').

Кэш страниц работает только с GET-запросами. Он перехватывает весь ответ (только для фронтенда), включая заголовки, и сохраняет его. Следующий запрос к той же странице (идентификатор строится на основе имени хоста и URI запроса) будет обслужен напрямую из кэша.

Вы можете проверить, была ли страница отдана из кэша, просмотрев заголовки ответа. Если присутствуют заголовки X-Pimcore-Cache-??? (помечено оранжевым цветом ниже), значит, страница загружена из кэша.

Если указано время жизни (lifetime), ответ также будет содержать заголовки Cache-Control и Expires (что полезно для HTTP-акселераторов, таких как Varnish)

Заголовки полностраничного кэша

Вы можете настроить полноэкранный кэш в config/config.yaml, например:

# config/config.yaml  
pimcore:
full_page_cache:
enabled: true
lifetime: 120
exclude_cookie: 'pimcore_admin_sid'
exclude_patterns: '@^/test/de@'

ОпцияОписание
EnableУстановите true, чтобы включить кэш страниц.
LifetimeВы можете дополнительно указать время жизни (в секундах) для всего кэша страниц. Если вы этого не сделаете, кэш будет удален автоматически при внесении изменений во внутренний интерфейс Pimcore. Если у элемента есть срок действия, он остается в кэше, даже если он изменен, до истечения срока действия TTL. Срок действия полезен, если вы внедрили некоторые элементы, которых нет непосредственно в cms, например, rss-каналы или сообщения Twitter через API. Также настоятельно рекомендуется указывать срок службы на веб-сайтах с высокой посещаемостью, чтобы изменения в пользовательском интерфейсе администратора не повлияли на внешний интерфейс (кэши). В противном случае при каждом изменении пользовательского интерфейса администратора весь выходной кэш очищается, что может иметь серьезные последствия для серверной среды.
Exclude PatternsРегулярные выражения (с разделителями) для путей, которые не нужно кэшировать. Несколько паттернов разделяются запятыми.
Disable CookieВы можете указать дополнительное имя файла cookie, которое отключает кэширование. Файл cookie "pimcore_admin_sid" (используется для пользовательского интерфейса администратора Pimcore) ВСЕГДА отключает кэширование выходных данных, чтобы облегчить работу редактора ;-)

Отключение полностраничного кэша в коде

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

Отключение кэширования через заголовки ответа

Добавление заголовка Cache-Control: no-store к вашему ответу отключит кэш Pimcore, а также кэширование в браузере и промежуточных шлюзах:

<?php  
$response->headers->addCacheControlDirective('no-store');

Отключение кэширования через слушатель события

Полный кэш страниц можно отключить с помощью обработчика (event listener) события FullPageCacheEvents::CACHE_RESPONSE:

<?php  

use Symfony\Component\EventDispatcher\Attribute\AsEventListener;

class DetermineFullPageCacheEventListener
{
#[AsEventListener(\Pimcore\Event\FullPageCacheEvents::CACHE_RESPONSE)]
public function determineFullPageCache(\Pimcore\Event\Cache\FullPage\CacheResponseEvent $event): void
{
$response = $event->getResponse();
if (true) { // Замените на ваше собственное условие
$event->setCache(false);
}
}
}

Полное отключение слушателя полностраничного кэша

Вы можете получить сервис слушателя из контейнера и отключить его, например, в контроллере через DI:

<?php  

use Pimcore\Bundle\CoreBundle\EventListener\Frontend\FullPageCacheListener;

public function portalAction(Request $request, FullPageCacheListener $fullPageCacheListener)
{
$fullPageCacheListener->disable('Your disable reason');
return $this->redirect('de');
}

Отключение полного кэша страниц для вашего запросу

Отключение Full Page Cache для одного запроса (только в DEBUG MODE)

Просто добавьте параметр ?pimcore_outputfilters_disabled=true к URL.

По умолчанию для настройки отключения файлов cookie установлено значение pimcore_admin_sid.

Это означает, что если вы залогинены в админку, вы всегда видите актуальный контент без кэша.

Bookmarklet

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

  • [Отключить кэш Pimcore](javascript:(function() {document.cookie='pimcore_admin_sid=disablethecachebaby'+(Math.floor(Math.random() * 147483648) + 2000)+';path=/;';})())
  • [Включить кэш Pimcore](javascript:void((function(){var a,b,c,e,f;f=0;a=document.cookie.split("; ");for(e=0;e<a.length&&a[e];e++){f++;for(b="."+location.host;b;b=b.replace(/^(?:%5C.|%5C.+)/,"")){for(c=location.pathname;c;c=c.replace(/.$/,"")){document.cookie=(a[e]+"; domain="+b+"; path="+c+"; expires="+new Date((new Date()).getTime()-1e11).toGMTString());}}}alert("Expired "+f+" cookies");})()))

Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.