protected function _construct()
{
$this->addData(
[
'cache_lifetime' => false,
'cache_tags' => array('MY_BLOCK'),
]
);
}
public function getCacheKeyInfo()
{
return [];
}
não funciona. Por quê? Como desativar o cache do bloco?
Respostas:
Os blocos podem ser configurados como não armazenáveis em cache, definindo o
cacheable
atributofalse
nos arquivos XML de layout. Por exemplo<block class="Block\Class" name="blockname" cacheable="false" />
As páginas que contêm esses blocos não são armazenadas em cache.
Verifique também como desativar o cache do bloco personalizado
Editar: Um único
cacheable="false"
desabilitará o Cache de página inteira para toda a página, tornando as páginas provenientes desse arquivo de layout extremamente lentas! Verifique https://inviqa.com/blog/how-full-page-cache-works-magento-2fonte
É importante entender por que você não deseja armazenar em cache o bloco. Se isso pretende mostrar algumas informações específicas da sessão, você deve procurar
Uma opção não recomendada também pode ser o controlador personalizado, que retorna alguns dados por chamada ajax (com o método POST para que não seja armazenado em cache).
(!) cacheable = "false" não deve ser usado. A seguir, por que não:
Um bloco com cacheable = "false" tornará a página inteira sem cache. Não é usado para perfuração de cache. A página a seguir também diz isso ( Para criar uma página não rastreável , marque qualquer bloco nessa página como não rastreável no layout usando cacheable = "false" ):
O que faz é que os módulos Varnish / Fastly enviarão devido a esse valor de atributo sempre cabeçalhos que não podem ser armazenados em cache.
Quando ativamos o cachable = "false" e, ao usar o Varnish / Fastly, os cabeçalhos do navegador são enviados:
Para isso, pode ser depurado o código de cache da página do Magento em
onde o primeiro deve enviar o Cache-Control público com TTL e o segundo deve enviar o X-Magento-Tags para Varnish / Fastly.
Ambos estão usando a verificação isCacheable (), onde sempre retorna FALSE após a verificação seguinte (verifique se no layout atual há algum atributo: cacheable = "false"):
Quando removemos cacheable = "false", começamos a obter as verificações isCacheable () como TRUE e também obtemos os cabeçalhos corretamente nas páginas start / category / product.
fonte
Eu criei
non-cacheable
para o bloco de preçosfonte
di.xml
Você pode adicionar bloco não armazenável em cache apenas a páginas personalizadas. Em outro caso, o Magento Page Cache não funcionará para essas páginas OU atualizará as informações em bloco via ajax (solicitações de seção magento).
Algumas coisas descritas aqui https://mirasvit.com/blog/magento-2-page-cache-coverage-rate.html
fonte