Magento EE 1.9 的缓存:我们应该使用整页缓存(带有打孔)和/或“经典”块缓存吗?
Posted
技术标签:
【中文标题】Magento EE 1.9 的缓存:我们应该使用整页缓存(带有打孔)和/或“经典”块缓存吗?【英文标题】:Cache for Magento EE 1.9: Should we use full page caching (with hole punching) and/or "classical" block caching? 【发布时间】:2014-07-17 11:18:57 【问题描述】:我们正在使用 Magento EE 1.9。
为了加快客户端网站的速度,我们正在尝试微调缓存。
如你所知 Magento 自带了不同的缓存技术。
在 Magento EE 中,我们可以使用全页缓存以及名为“打孔”的技术。 据我了解,这个缓存使用了一些容器来确定 如果应该从缓存中检索动态块 => applyWithoutApp($content) 或者如果应该使用 $this->_renderBlock() => applyWithApp($content) 实例化和渲染动态块
为了做到这一点,您必须在 cache.xml 中声明您想要“打孔”的块,其中包括其适当的容器类扩展 Enterprise_PageCache_Model_Container_Abstract 在这个容器类中,您必须实现不同的功能,例如 _getIdentifier()、_getCacheId()、_renderBlock 如您所见,Contanier 拥有自己的缓存 ID。
这里解释
http://www.magentocommerce.com/wiki/5_-_modules_and_development/block_cache_and_html_ouput 要缓存一个块,您必须通过定义 cache_lifetime,cache_tags,cache_key 直接在 bloc 的构造函数中添加数据
class NS_Module_Block_View extends Mage_Core_Block_Template
protected function _construct()
$this->addData(array(
'cache_lifetime' => 120,
'cache_tags' => array(Mage_Catalog_Model_Product::CACHE_TAG . "_" . $this->getProduct()->getId()),
'cache_key' => $this->getProduct()->getId(),
));
使用后续帖子进行编辑 http://magebase.com/magento-tutorials/adding-cache-support-to-magento-blocks/
我知道静态的“cache_key”是不够的。 对于这些 cas,我们应该使用 getCacheKeyInfo 方法:
public function getCacheKeyInfo()
return array(
'EXAMPLE_BLOCK',
Mage::app()->getStore()->getId(),
(int)Mage::app()->getStore()->isCurrentlySecure(),
Mage::getDesign()->getPackageName(),
Mage::getDesign()->getTheme('template')
);
所有这些我回到我的问题: 据我了解,FPC + 打孔似乎是“缓存”的更完整解决方案。 但是全页缓存(带打孔)和“经典”块缓存有什么区别?
-> 由于我们使用的是 Magento EE 1.9,我们应该只使用 FPC + 打孔吗? (因为在某种程度上FPC+打孔已经是缓存块的一种方式了?)
这是否意味着“经典”块缓存已经过时或仅适用于 magento 社区版的用户?-> 还是应该同时使用(FPC + 打孔和经典块缓存)?
在这种情况下,当块拥有自己的缓存键(或 getCacheKeyInfo())时,为容器设置缓存 id 有什么好处? 在这种情况下,这些缓存方法中的哪一种是主要的?提前感谢您的所有回答!
【问题讨论】:
【参考方案1】:Magento 通常使用分层缓存方法:如果***缓存没有命中,那么希望一些低级缓存可以加快响应的构建时间。
但是,对于 Magento FPC,通常的块级缓存会自动禁用。动态块的缓存在 FCP 级别完成。然而,该过程涉及来自gatCacheKeyInfo()
方法的信息以构建缓存键(并构建参数列表以“不使用应用程序”重新生成块)。
如果您使用的 FCP 与 EE 不同,那么通常的块缓存仍然可以用作缓存的后备级别。 IMO 这种方法是有意义的。
【讨论】:
以上是关于Magento EE 1.9 的缓存:我们应该使用整页缓存(带有打孔)和/或“经典”块缓存吗?的主要内容,如果未能解决你的问题,请参考以下文章