2

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

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

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

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

4

3 回答 3

3

我的 2 美分:

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

“代理缓存”

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

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

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

所以请求流是:

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

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

“Magento FPC”

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

再次请求流程:

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

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


结论:

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

高温高压

于 2012-09-27T14:13:38.180 回答
1

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

看看 Fabrizio Branca 博客中的这张图表:

在此处输入图像描述

于 2012-09-08T17:01:43.187 回答
0

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

于 2012-11-07T00:49:18.133 回答