我一直在查看 magento 中的整页缓存,但对此以及动态块的发送方式没有意义。
对于包含动态数据的块,仍需要引导应用程序并且需要构建布局以生成块,例如购物篮内容、最近查看等
服务器现在正在做更多的工作。
这是正确的,如果是这样,如何解决这个问题
我的 2 美分:
这取决于你如何做你的FPC......
如果您正在使用其他一些缓存前端/代理,例如 nginx 或 varnish 或 [在此处插入一个],那么它确实会像您一样减少负载:
还取决于您的需要,您可以将信息存储在 cookie 中以供 js 在页面加载后使用而不执行第二次请求,这再次取决于动态信息的动态和敏感程度。
所以请求流是:
是的,您确实为额外的往返支付了费用,但是您确实可以立即为客户加载内容,并且在处理 ajax 请求时,浏览器可能会从服务器中提取图像/css/其他 js,这很好。
老实说,我不知道企业版是如何做到的(只是还没有阅读代码),但在处理大多数(不是全部)事情之前,有一个部分可以附加缓存处理器。在那个环境中,应用程序已经被引导并加载了一些配置,因此您实际上可以从缓存中拉取 FPC,然后用特定信息替换占位符,并在一个请求中将其发送出去。
再次请求流程:
请求-> Magento(在路由等之前)-> 打孔-> 响应。
因此,在动态内容出现之前,事情不会开始加载,但您没有额外的往返行程。
结论:
至于哪个是最好的,这取决于您的需求和设置。这些只是我见过的两种不同的设置,在我的测试中,任何一种方法的表现都完全没有 FPC。
高温高压
不确定我是否理解您的问题,但 Magento 和您的服务器将做更少的工作,因为它只会生成和交付您由 XML 定义的打孔的动态块。页面的其余部分是由 varnish 提供的静态 html,它甚至不会将这些请求传递给 magento。
看看 Fabrizio Branca 博客中的这张图表:
是的,第二个请求到达服务器。它还在第 30 行加载布局。这意味着将加载某些句柄 - 默认、customer_logged_out(或 in)和呼叫控制器(我错过了什么吗?)。在此博客http://www.fabrizio-branca.de/make-your-magento-store-fly-using-varnish.html中,建议您将占位符添加到默认句柄。unsetChild 方法允许您在调用控制器中仍按名称加载块。其原因在一些艾伦风暴博客中有所描述,并且(我认为)他的一个模块处理了一些关于删除而不是未设置块的问题。这个模块并没有真正处理缓存失效。也许你应该查看这篇文章magento 开源整页缓存