protected function _construct()
{
$this->addData(
[
'cache_lifetime' => false,
'cache_tags' => array('MY_BLOCK'),
]
);
}
public function getCacheKeyInfo()
{
return [];
}
No funciona. ¿Por qué? ¿Cómo deshabilitar el caché para el bloque?
Respuestas:
Los bloques se pueden configurar como no almacenables en caché configurando el
cacheable
atributofalse
en los archivos XML de diseño. Por ejemplo<block class="Block\Class" name="blockname" cacheable="false" />
Las páginas que contienen dichos bloques no se almacenan en caché.
También verifique cómo deshabilitar el almacenamiento en caché del bloque personalizado
Editar: ¡ Un solo
cacheable="false"
deshabilitará el almacenamiento en caché de página completa para toda la página, haciendo que las páginas que se obtienen de ese archivo de diseño sean extremadamente lentas! Consulte https://inviqa.com/blog/how-full-page-cache-works-magento-2fuente
Es importante entender por qué no desea bloquear el caché. Si esto está destinado a mostrar información específica de la sesión, entonces debería estar investigando
Una opción no recomendada podría ser también un controlador personalizado que devuelve algunos datos a través de una llamada ajax (con el método POST para que no se almacene en caché).
(!) cacheable = "false" no debe usarse. A continuación, POR QUÉ no:
Un bloque con cacheable = "false" hará que toda la página quede en caché. No se utiliza para perforar caché. Además, la página siguiente dice esto ( para crear una página que no se puede almacenar en caché , marque cualquier bloque en esa página como no almacenable en caché en el diseño usando cacheable = "false" ):
Lo que hace es que los módulos Varnish / Fastly se enviarán debido a este valor de atributo siempre encabezados no almacenables en caché.
Cuando habilitamos cachable = "false" y al usar Varnish / Fastly, se envían los siguientes encabezados del lado del navegador:
Para eso se puede depurar el código de almacenamiento en caché de la página de Magento en
donde el primero debe enviar un control de caché público con TTL y el segundo debe enviar X-Magento-Tags para Varnish / Fastly.
Ambos usan la verificación isCacheable () donde esto siempre devuelve FALSE debido a la siguiente verificación (verifique si en el diseño actual hay algún atributo: cacheable = "false"):
Cuando eliminamos cacheable = "false", comenzamos a obtener verificaciones isCacheable () como VERDADERO y también obtener encabezados correctamente en las páginas de inicio / categoría- / producto.
fuente
He hecho
non-cacheable
para el bloque de preciosfuente
di.xml
Puede agregar bloque no almacenable en caché solo a páginas personalizadas. En otro caso, la memoria caché de página de magento no funcionará para estas páginas O actualizará la información en bloque a través de ajax (solicitudes de la sección de magento).
Algunas cosas descritas aquí https://mirasvit.com/blog/magento-2-page-cache-coverage-rate.html
fuente