我们正在使用Magento EE 1.9。
为了加速客户网站,我们正在尝试微调缓存。
如你所知 Magento带有不同的缓存技术。
在Magento EE中,我们可以使用全页缓存和名为“打孔”的技术。 据我所知,这个缓存使用了一些容器来确定 如果动态块应该从缓存中检索=> applyWithoutApp($内容) 或者如果动态块应该使用$ 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(),
));
}
}
使用fllowing帖子进行编辑 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 +打孔已经是一种缓存块的方法了?)
- >或者我们应该同时使用(FPC +打孔和经典的块缓存)?
感谢所有答案!
答案 0 :(得分:1)
通常,Magento使用分层方法进行缓存:如果顶级缓存没有命中,那么希望某些低级缓存可以使响应的构建时间更快。
但是,对于Magento FPC,通常会自动禁用块级缓存。动态块的缓存是在FCP级别完成的。然而,该过程涉及来自gatCacheKeyInfo()
方法的信息以构建缓存密钥(并且构建用于在没有app的情况下重新生成块的参数列表)。
如果您使用的是与EE不同的FCP,那么通常的块缓存仍然可以用作缓存的后备级别。国际海事组织这种方法是有道理的。