我浏览了很多论坛,但我无法解决 Magento EE 1.11 版本中的 FPC 问题。当我浏览移动主题时,由于 FPC,它正在使用 web 主题。如果我禁用 FPC,性能会下降。
有人可以帮我解决这个问题吗?
主题不用作 FPC uri 的一部分,因此每个包只有一个缓存。
我写了一个小扩展来解决这个问题,你可以在 Github 上获取它。
一个不需要任何代码修补的简单解决方案:
将具有与主题部分中的正则表达式相同的异常添加到包部分中,并将其链接到与“当前包名称”设置为完全相同的包名称。
先决条件:
主题级别的每个部分只有一个例外,例如,iPhone|iPad -> iphone
(而不是iPhone -> iphone
+ iPad -> iphone
)
解释为什么它起作用:
企业页面缓存在生成cacheid时考虑了包异常。
但是,它不会检查包名称是否相同!
所以即使异常包与主包相同,也会生成不同的cacheid,而且由于主题部分的正则表达式异常相同,它们将使用新的chacheid存储在全页缓存中。
示例:
在“企业”包中,有 2 个主题“默认”和“iPhone”。
您希望通过iPhone|iPad
在“主题”小节中添加“模板”、“皮肤”和“布局”的例外来运行主题“iphone”。
在“包”小节中:
将“当前包名称”设置为“企业”。使用-> "enterprise"
将例外添加到包中iPhone|iPad
在“主题”小节中:
将例外添加到“模板”,iPhone|iPad -> enterprise
将例外添加到“皮肤”,iPhone|iPad -> enterprise
将例外添加到“布局”,iPhone|iPad -> enterprise
将“默认”设置为“默认”
注意: 测试前不要忘记在 System->Cache Management 中清除 FPC。
我感觉 Enterprise/PageCache 中的设计异常支持在包级别而不是主题级别上工作。查看 app/code/core/Enterprise/PageCache/Model/Observer.php 中引用设计异常的代码。我的第一个建议是联系 EE 支持,也许他们可以提供适当的解决方案或补丁。或者,您可以通过重写 enterprise_pagecache/processor 来修改缓存密钥机制:
public function prepareCacheId($id)
{
$package = Mage::getDesign()->getPackageName();
$templateTheme = Mage::getDesign()->getTheme('template');
$id = $id.'_'.$package.'_'.$templateTheme;
return parent::prepareCacheId($id);
}