Magento EE 1.9的缓存:我们应该使用整页缓存(带打孔)和/或“经典”块缓存吗?

时间:2014-05-28 09:45:39

标签: php magento caching hole-punching magento-fpc

我们正在使用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 +打孔已经是一种缓存块的方法了?)

  • 这是否意味着“经典”的块缓存只是过时的或仅专用于magento Comunity Edition的用户?

- >或者我们应该同时使用(FPC +打孔和经典的块缓存)?

  • 在这种情况下,当一个块有自己的缓存键(或getCacheKeyInfo())时,为容器设置缓存ID有什么兴趣?
  • 在这种情况下,哪种缓存方法占主导地位?

感谢所有答案!

1 个答案:

答案 0 :(得分:1)

通常,Magento使用分层方法进行缓存:如果顶级缓存没有命中,那么希望某些低级缓存可以使响应的构建时间更快。

但是,对于Magento FPC,通常会自动禁用块级缓存。动态块的缓存是在FCP级别完成的。然而,该过程涉及来自gatCacheKeyInfo()方法的信息以构建缓存密钥(并且构建用于在没有app的情况下重新生成块的参数列表)。

如果您使用的是与EE不同的FCP,那么通常的块缓存仍然可以用作缓存的后备级别。国际海事组织这种方法是有道理的。