【发布时间】:2012-10-25 20:22:02
【问题描述】:
我最近与一位开发人员交谈,他说即使使用默认安装,也没有任何 magento CE 整页缓存可以完美运行。
我的经历是一样的。
如果您使用 aoe_static 的出色模块和 phoenix 的全页缓存和 varnish 模块,您将接近。
使用 aoe_static 模块缓存是在每个动作的基础上完成的,这对我来说似乎是明智的。打孔是通过布局 xml 应用的占位符和通过不会被缓存的 ajax 调用请求的动态块来完成的。 cookie 也通过此调用设置。他提供了一个默认的 vcl,它适用于 varnish 2(我从未检查过),并且可以很容易地更改为 varnish 3。
phoenix 模块很好地处理了缓存失效。您可以在模块的控制文件夹中看到方法。这会在产品或类别更改时处理缓存失效,并使产品页面和类别页面都失效。但是,分层导航生成的 url 可能会被缓存(取决于您的 vcl)。这些都没有失效,所以要小心。
在我将它们用于生产站点之前,我真的很想知道这些模块是否存在任何其他问题。如果有人能指出我的问题,我很乐意尝试发布解决方案。
但是对于分层导航 url,需要一个模型来记录生成的带有类别 ID 的 url。我想拥有一个 2 列模型(url 和类别)会很简单,然后缓存失效需要检查模型并使额外的 url 失效。这应该在主类别 url 完成的同时完成。听起来还不错。如果有人得到我非常简短的解释,请在我浪费时间之前告知我是否遗漏了什么。
我宁愿在一些社区帮助(或更有经验的领导者)的帮助下创建一个开源项目,至少在默认的 1.7 安装中具有(当之无愧的)可靠性声誉。我认为最明智的做法是创建一个包含或记录所有边缘案例(对于默认的 1.7 安装)的模块。
有人知道如何执行这样的任务吗?如果有更多的社区支持使用 apc 或 memcached 执行此操作,那么对于更广泛的托管可用性可能更明智。逻辑或开发时间不会有太大变化。
这可以扩展以涵盖应该牢记的块的会话缓存,但我认为关注可靠的全页缓存应该是优先事项。
您还可以在 vcl 中检测设备。这可以添加到想要移动版本的商店https://github.com/varnish/varnish-devicedetect/blob/master/devicedetect.vcl
我已经为这个项目创建了一个电子邮件,所以如果你想参与它是“magefpc gmail com”。任何有 magento、git 和调试经验的人都会受到欢迎。
谢谢
【问题讨论】:
-
不是一个真正的答案,但我们已经在许多网站上使用了 Phoenix mouldule,并围绕基于某些事件打开/关闭缓存进行了一些扩展,并引入了一个基于 cookie 的系统用于维护一些用户数据客户端。我们在github.com/aligent/Phoenix_VarnishCache 维护我们的模块版本的公共GitHub 存储库......我们还看到(但未使用)Nexcess 的Turpentine 模块(github.com/nexcess/magento-turpentine)。 Turpentine 的实现要简单得多,而且看起来很有趣。我们很乐意尽我们所能提供帮助。
-
非常感谢您的报价!我查看了您的代码,它看起来很合理,但采用了非常不同的方法。我相信我们应该等待几周才能看到更多变化并权衡利弊。无论如何,分层导航 url 需要失效,但我相信应该绑定到一个完整的模块
-
我想多了,得出的结论是我真的很喜欢使用phoenix 模块和aoe_static 的模块。就像我说的那样,您对动态内容的处理方式非常不同。但是,您与 AW 博客的集成是一个绝妙的主意,对大多数企业来说都是必不可少的。我真的认为重构这些元素并将我描述的缓存失效添加到一个模块中是一种好方法。我想检查其他模块的创建者是否对此感到满意并试一试。你认为呢?我们现在似乎独自在这个问题上:(
-
Phoenix 模块是 OSL 许可的,所以应该没有问题,我认为 aoe_static 是一样的。我没有看过 aoe_static,但我们在我们做的大多数网站上都使用 aoe_scheduler,它非常棒。
-
是的,他是个很酷的人,而且在 aoe_static 模块上甚至没有许可证。这个想法对我来说似乎很合理,但需要一些工作和大量测试。我认为以这种方式构建的连贯的单个模块很容易适应大多数商店。是否需要比迄今为止基本描述的更多的工作?