我有几种情况,我将在几个月后最终考虑。只是把问题扔在那里,以便在此期间我可以考虑一下讨论。
我在我的应用程序堆栈中使用Zend Framework。我正在使用APC进行服务器缓存(而不是使用memcache,因为我不相信即使我的应用程序是分布式的,memcache也无法为我带来任何好处。)
我的应用程序已构建为无需JavaScript即可工作,然后为了获得JavaScript支持,我分解了页面并呈现了JavaScript友好版本。
如果您分析一个简单的页面,也许其中的80%是核心功能,可以为每个用户缓存。然后为该用户定制其中的20%。例如,我可能想显示
这两个“小部件”对于每个用户而言都是特定的。我当时正在考虑对这些组件使用ESI,但后来我发现任何/我的Zend Framework应用程序最耗费资源的方面是引导和分发过程。因此,如果我的应用程序当前需要80毫秒而不进行缓存。就像90%的相对时间都花在 bootstrap 和插件 Hook 上一样,如果我要使用ESI加载这两个“窗口小部件”,那么我会有效地在每个页面上添加负载吗?因为我将为每个缓存的页面启动另一个80ms请求。
在这种情况下,建议您仅通过JavaScript加载自定义的小部件/代码段,在加载初始页面后即可将其拉出。这样做的明显好处是,只有一个请求被缓存,然后在服务了初始页面(被缓存)之后,将单个请求中的所有定制内容都拉到单个请求中。
如果我正在寻找最佳性能,这似乎是更好的解决方案?
最佳答案
您可以构建第二个简单的应用程序,该应用程序基于ajax调用从缓存中读取内容,并且仅在未缓存信息时进行引导。然后可以将响应添加到缓存,以便进一步的调用不会加载您的zend项目。这是正常过程,但也需要对缓存无效进行编程。您已经使用了适合此功能的apc。显然,它不适用于最近5次观看或类似的内容。
关于zend-framework - 使用Varnish/ESI和Zend框架的缓存和页面 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8308409/