protected function _construct()
{
$this->addData(
[
'cache_lifetime' => false,
'cache_tags' => array('MY_BLOCK'),
]
);
}
public function getCacheKeyInfo()
{
return [];
}
не работает. Зачем? Как отключить кеш для блока?
Ответы:
Блоки могут быть установлены как не кешируемые путем установки
cacheable
атрибутаfalse
в XML-файлах макета. Например<block class="Block\Class" name="blockname" cacheable="false" />
Страницы, содержащие такие блоки, не кэшируются.
Также проверьте, как отключить кэширование пользовательского блока
Редактировать: Сингл
cacheable="false"
отключит кэширование всей страницы для всей страницы, делая поиск страниц из этого файла макета чрезвычайно медленным! Проверьте https://inviqa.com/blog/how-full-page-cache-works-magento-2источник
Важно понимать, почему вы не хотите кешировать блоки. Если это предназначено для отображения некоторой информации, относящейся к сессии, то вам следует изучить
Одной из не рекомендуемых опций может быть также пользовательский контроллер, который возвращает некоторые данные через ajax-вызов (с POST-методом, чтобы он не кэшировался).
(!) cacheable = "false" не должен использоваться. Здесь будет следовать, почему нет:
Блок с cacheable = "false" сделает всю страницу не кешированной. Он не используется для пробивки кеша. Также следующая страница говорит следующее ( Чтобы создать не кэшируемую страницу , пометьте любой блок на этой странице как не кэшируемый в макете, используя cacheable = "false" ):
Что он делает, так это то, что модули Varnish / Fastly будут отправлять из-за этого значения атрибута всегда не кешируемые заголовки.
Когда мы включаем cachable = "false" и при использовании Varnish / Fastly, на стороне браузера отправляются следующие заголовки:
Для этого можно отладить код кэширования страницы Magento на
где первый должен отправить публичный Cache-Control с TTL, а второй должен отправить X-Magento-теги для Varnish / Fastly.
Оба используют проверку isCacheable (), где это всегда возвращает FALSE из-за следующей проверки (проверьте, есть ли в текущем макете какие-либо атрибуты: cacheable = "false"):
Когда мы удаляем cacheable = "false", мы начинаем получать проверки isCacheable () как TRUE, а также правильно получать заголовки на страницах start / category- / productpages.
источник
Я сделал
non-cacheable
для блока ценообразованияисточник
di.xml
Вы можете добавить не кешируемый блок только на пользовательские страницы. В другом случае magento Page Cache не будет работать для этих страниц ИЛИ обновлять информацию в блоке через ajax (запросы раздела magento).
Некоторые вещи описаны здесь https://mirasvit.com/blog/magento-2-page-cache-coverage-rate.html
источник