2014-07-23 61 views
0

我正在做一些关于如何正确缓存AJAX响应的研究,因为这会加速有很多AJAX请求的页面。我在雅虎网站上发现了这件作品:如何正确缓存AJAX

让我们来看一个例子。 Web 2.0电子邮件客户端可能使用Ajax来下载用户的通讯簿以进行自动完成。如果用户自上次使用电子邮件Web应用程序以来未修改过她的地址簿,则可以从缓存中读取以前的地址簿响应,如果该Ajax响应可以使用未来的Expires或Cache-Control标头进行缓存的话。必须通知浏览器何时使用先前缓存的地址簿响应与请求新的响应。这可以通过向地址簿Ajax URL添加时间戳来指示用户最后一次修改地址簿的时间戳,例如,& t = 1190241612。如果地址簿自上次下载以来尚未修改,则时间戳将相同,并且地址簿将从浏览器的缓存中读取,从而消除额外的HTTP往返。如果用户修改了她的地址簿,则时间戳会确保新的URL与缓存的响应不匹配,并且浏览器将请求更新的地址簿条目。

这使得它不太清楚。我想知道这一切的原因是,我正在构建一个简单的网页,用户可以在网页上添加快捷方式。他们看到一个网格图标,可以点击或搜索他们需要的网站。这只是作为一个项目去了解PHP,最重要的是AJAX更好;没有任何实际的用户会看到。

正如你可以想象的那样,搜索功能让网站变慢了很多。特别是因为它在之后每键入的字母执行AJAX请求。因此,我认为如果缓存一些部分,网站会大大改善。

回答

0

你必须让你的心第一次:

你想使用的缓存的响应,或者你希望服务器每次创建一个新的吗?

我不清楚你究竟在问什么。你想要缓存什么,多长时间?

  • 如果您想要一个缓存响应,只需使用您以前使用的URL。 (在组合的到期头)

例如: http://www.example.com/myAjaxHelper.php?q=ab

如果服务器响应与一个Expires头,说:“一周内从现在的”,你会得到一个星期缓存的响应。你的浏览器会这样做。 (请记住,您可以在响应标头中设置expires值) 浏览器不尊重expires标题有问题,并且有时它们会获取缓存版本而不是新版本,即使它过去已过期。 (尤其是老年IE需要一些额外的标题来解决这个问题,这是非常令人困惑)

这将导致一个新的URL每一秒。而且这个永远不会被缓存,因为这个URL是不一样的(只限于time = ....部分,但这足以强制一个新的请求)。