Zend framework 使用Varnish/ESI和Zend框架缓存和页面视图 我有几个场景,几个月后我将最终需要考虑。把问题抛出去,这样我就可以在讨论的同时仔细考虑了

Zend framework 使用Varnish/ESI和Zend框架缓存和页面视图 我有几个场景,几个月后我将最终需要考虑。把问题抛出去,这样我就可以在讨论的同时仔细考虑了,zend-framework,caching,varnish,esi,Zend Framework,Caching,Varnish,Esi,我将Zend Framework用于我的应用程序堆栈。我使用APC进行服务器缓存(而不是memcache,因为我不相信memcache对我有任何好处,即使我的应用程序是分布式的) 我的应用程序是在不使用JavaScript的情况下构建的,为了支持JavaScript,我将页面分解并呈现JavaScript友好的版本 如果你分析一个简单的页面,可能80%是核心功能,每个用户都可以缓存。然后20%是为该用户定制的。例如,我可能希望显示 最近5次查看的项目 喜欢的项目 这两个“小部件”对于每个用户

我将Zend Framework用于我的应用程序堆栈。我使用APC进行服务器缓存(而不是memcache,因为我不相信memcache对我有任何好处,即使我的应用程序是分布式的)

我的应用程序是在不使用JavaScript的情况下构建的,为了支持JavaScript,我将页面分解并呈现JavaScript友好的版本

如果你分析一个简单的页面,可能80%是核心功能,每个用户都可以缓存。然后20%是为该用户定制的。例如,我可能希望显示

  • 最近5次查看的项目
  • 喜欢的项目
这两个“小部件”对于每个用户都是特定的。我曾考虑对这些组件使用ESI,但后来我发现任何/my Zend Framework应用程序最消耗的方面是引导和调度过程。因此,如果我的应用程序当前没有缓存,需要80毫秒。就像90%的相对时间花在引导和插件挂钩上一样,如果我使用ESI加载这两个“小部件”,那么我会有效地向每个页面添加负载吗?因为我将为每个缓存页面启动另一个80ms请求

在这种情况下,您建议只通过JavaScript加载定制的小部件/代码片段,一旦加载了初始页面,就可以提取JavaScript。这样做的明显好处是,只有一个请求被缓存,然后在初始页面(被缓存)被服务之后,任何定制的内容都被拉入一个请求中


如果我在寻找最高性能,这似乎是更好的解决方案

知道80ms已经很好了(人类用户不会在1和500ms之间产生任何差异),使用ESI修饰不会帮助您减少页面加载时间

它将帮助您避免服务器在重负载上的压力,这与ESI和AJAX一样适用

如果您的首要任务是尽可能快地显示主页,那么AJAX是最好的方式,因为ESI将在发送整个页面之前等待子请求的响应


如果你仍然希望你的应用程序不兼容JS,你可以过滤用户代理以使用JS(如果可能)和ESI(如果不兼容),但这种技巧很容易弄脏…

使用ESI修饰不会帮助你减少页面加载时间,因为知道80ms已经很好了(人类用户在1到500ms之间不会有任何区别…)

它将帮助您避免服务器在重负载上的压力,这与ESI和AJAX一样适用

如果您的首要任务是尽可能快地显示主页,那么AJAX是最好的方式,因为ESI将在发送整个页面之前等待子请求的响应


如果你仍然希望你的应用程序不兼容JS,你可以过滤用户代理,如果可能的话使用JS,如果不兼容的话使用ESI,但是这种技巧很容易弄脏…

你可以构建第二个简单的应用程序,根据ajax调用从缓存中读取信息,如果信息没有被缓存,则只进行引导。然后可以将响应添加到缓存中,这样进一步的调用就不会加载zend项目。这是一个正常过程,但也需要对缓存失效进行编程。您已经在使用apc,这将适用于此。显然,对于最近5次查看的内容或类似内容,它不起作用。

您可以构建第二个简单的应用程序,该应用程序基于ajax调用从缓存中读取信息,并且仅在信息未缓存时引导。然后可以将响应添加到缓存中,这样进一步的调用就不会加载zend项目。这是一个正常过程,但也需要对缓存失效进行编程。您已经在使用apc,这将适用于此。显然,在最近5次浏览或类似内容时,它不起作用