Magento 使用 varnish 进行整页缓存

Posted

技术标签:

【中文标题】Magento 使用 varnish 进行整页缓存【英文标题】:Magento full page caching with varnish 【发布时间】:2012-09-02 04:13:50 【问题描述】:

我一直在研究 magento 中的整页缓存,但对此以及动态块的发送方式没有任何意义。

对于包含动态数据的块,仍需要引导应用程序并构建布局以生成块,例如购物篮内容、最近查看等

服务器现在正在做更多的工作。

这是正确的,如果是,如何解决这个问题

【问题讨论】:

【参考方案1】:

我的 2 美分:

这取决于你如何做你的 FPC...

“代理缓存”

如果您使用其他一些缓存前端/代理,例如 nginx 或 varnish 或 [在此处插入一个],那么它确实会像您一样减少负载:

    一个请求获取缓存后页面的“框架” 甚至不接触 php 或 magento 或 mysql,只提供静态 文件。因此,一旦缓存它就不需要引导应用程序或 加载和解析任何布局/配置/系统 xml。 第二个请求是获取动态内容,并且要轻得多。是的,它 仍然必须使用 config/layout/system xml 但这应该 已经被缓存并且它不必创建/处理那么多 块取决于动态需求。

还取决于您的需要,您可以将信息存储在 cookie 中以供 js 在页面加载后使用而不执行第二次请求,这再次取决于动态信息的动态和敏感程度。

所以请求流程是:

    请求-> nginx/varnish/etc(超快)-> 响应... ajax 请求 -> Magento 用于动态内容(处理整个页面时更轻松)-> 响应 -> js 替换元素。

是的,您确实为额外的往返支付了费用,但是您确实可以立即为客户加载内容,并且在处理 ajax 请求时,浏览器可能会从服务器拉取图像/css/其他 js,这很好。

“Magento FPC”

老实说,我不知道企业版是如何做到的(只是还没有阅读代码),但在处理大多数(不是全部)事情之前,有一个部分可以附加缓存处理器。在那种环境中,应用程序已经被引导并加载了一些配置,因此您实际上可以从缓存中拉取 FPC,然后用特定信息替换占位符,并在一个请求中将其发送出去。

再次请求流程:

请求 -> Magento(在路由等之前)-> 打孔 -> 响应。

因此,在动态内容出现之前,事情不会开始加载,但您没有额外的往返行程。

结论:

至于哪一个是最好的,这取决于您的需求和设置。这些只是我见过的两种不同的设置,在我的测试中,任何一种方法的表现都完全没有 FPC。

HTH

【讨论】:

【参考方案2】:

不确定我是否正确理解了您的问题,但 Magento 和您的服务器将做更少的工作,因为它只会生成和交付您通过 XML 定义的打孔的动态块。页面的其余部分是由 varnish 提供的静态 html,它甚至不会将这些请求传递给 magento。

看看这张来自 Fabrizio Branca 博客的图表:

【讨论】:

是的,但是为了创建打孔块,必须引导系统并生成布局,解析等等。所以实际上还有很多工作要做。这是我的问题 @Socrates 这就是缓存的工作原理。一个请求完成了构建某些东西的所有“艰苦工作”,然后下一百万个请求从缓存中提取该信息。【参考方案3】:

是的,第二个请求到达服务器。 它还在第 30 行加载布局。这意味着将加载某些句柄 - 默认、customer_logged_out(或 in)和呼叫控制器(我错过了什么吗?)。在此博客http://www.fabrizio-branca.de/make-your-magento-store-fly-using-varnish.html 中,建议您将占位符添加到默认句柄。 unsetChild 方法允许您在调用控制器中仍按名称加载块。其原因在一些艾伦风暴博客中有所描述,并且(我认为)他的一个模块处理了一些关于删除而不是未设置块的问题。这个模块并没有真正处理缓存失效。也许你应该看看这个帖子magento open source full page cache

【讨论】:

以上是关于Magento 使用 varnish 进行整页缓存的主要内容,如果未能解决你的问题,请参考以下文章

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

在多种货币之间切换时,Magento Enterprise 整页缓存(FPC)购物车侧边栏问题

为啥 Magento 在产品保存时使整页缓存失效实际上使页面未缓存以及由于未缓存而刷新会做啥

Magento 可以在缓存键中使用会话变量吗?

Magento Magmi 导入和缓存问题

客户登录时,清漆在 HTML 标头中出现 403 禁止错误