2011-11-29 63 views
1

我有几个场景,我最终需要在几个月时间内考虑这些场景。只是把问题放在那里,以便我可以同时讨论讨论。使用Varnish/ESI和Zend Framework进行缓存和页面浏览

我为我的应用程序堆栈使用Zend Framework。我正在使用APC进行服务器缓存(而不是memcache,因为我不认为即使我的应用程序已分发,memcache也会为我提供任何好处)。

我的应用程序已经构建成无JavaScript工作,然后用于JavaScript支持我将页面分解并呈现适合JavaScript的版本。

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

  • 最后5浏览过的商品
  • 收藏最多的项目

这两个“小部件”将是针对每个用户。我正在考虑对这些组件使用ESI,但后来我发现任何/我的Zend Framework应用程序最消费的方面是引导和分派过程。所以如果我的应用程序目前需要80毫秒而没有缓存。像90%的相对时间花费在bootstrap和Plugin钩子上,如果我使用ESI来加载这两个“小部件”,那么我会有效地为每个页面添加负载?因为我会为每个缓存页面启动另一个80ms请求。

在这种情况下,您是否建议通过JavaScript加载自定义的小部件/片段,在初始页面加载后可以将其拖动。这样做的明显好处是,只有一个请求被缓存,然后在初始页面(被缓存)提供之后,在单个请求中提取任何自定义的请求。

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

回答

0

光油与ESI不会帮助你减少网页加载时间,知道80毫秒已经是不错的(人类用户不会使1和500毫秒之间的任何差别......)

这将帮助你避免服务器对重负载的压力,这与ESI和AJAX一样。

如果您的优先级是尽可能快地显示主页面,那么AJAX是最好的方式,因为ESI在发送整个页面之前会等待子请求进行响应。

如果您仍然希望您的应用程序是不兼容的JS,你可以过滤过滤器的用户代理如果可能的话ESI如果不使用JS但这种伎俩的是easyly脏...

1

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