了解为什么不想缓存块很重要。如果这是为了显示一些特定于会话的信息,那么您应该调查一下
一个不推荐的选项也可以是自定义控制器,它通过ajax调用返回一些数据(使用POST方法,因此不会被缓存)。
(!)cacheable =“ false”不能使用。为什么不呢?
带有cacheable =“ false”的块将使整个页面不被缓存。它不用于高速缓存打孔。同样在下面的页面上这样说(要创建不可缓存的页面,请使用cacheable =“ false”将该页面上的任何块标记为在布局中不可缓存):
这是因为该属性值始终是不可缓存的标头,因此会发送Varnish / Fastly模块。
当我们启用cachable =“ false”并在使用Varnish / Fastly时,将发送浏览器端以下标头:
X-Magento-Cache-Debug:MISS
X-Magento-Cache-Control:max-age=0, must-revalidate, no-cache, no-store
Age: 0
为此可以调试Magento的页面缓存代码在
vendor/magento/module-page-cache/Model/Layout/LayoutPlugin.php::afterGenerateXml
vendor/magento/module-page-cache/Model/Layout/LayoutPlugin.php::afterGetOutput
第一个应该发送带有TTL的公共缓存控制,第二个应该发送用于清漆/快速的X-Magento-Tag。
两者都使用isCacheable()检查,由于以下检查(检查当前布局中是否有任何属性:cacheable =“ false”),该方法始终返回FALSE:
$cacheableXml = !(bool)count($this->getXml()->xpath('//' . Element::TYPE_BLOCK . '[@cacheable="false"]'));
当我们删除cacheable =“ false”时,我们开始将isCacheable()检查为TRUE,并且还可以在start- / category- / productpages上正确获取标头。
X-Magento-Cache-Control:max-age=86400, public, s-maxage=86400
X-Magento-Cache-Debug:HIT
X-Magento-Cache-Hits:1
Age:32