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)购物车侧边栏问题