如何正确缓存AJAX

时间:2014-07-23 12:11:23

标签: javascript php jquery ajax caching

我正在研究如何正确缓存AJAX响应,因为这会加速包含大量AJAX请求的页面。我在雅虎网站上发现了这篇文章:

  

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

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

可以想象,搜索功能可以减慢网站的速度。特别是因为它在每个类型的字母后执行了一个AJAX请求。因此,我认为如果网站的某些部分被缓存,它将大大改善网站。

1 个答案:

答案 0 :(得分:0)

你必须首先下定决心:

您是否希望使用缓存响应,或者您希望服务器每次都创建一个新的响应?

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

  • 如果您想要缓存响应,只需使用之前使用过的URL即可。 (与expires-header结合使用)

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

如果服务器使用过期标题回复"从现在起一周后#34;,您将获得一周的缓存响应。你的浏览器会这样做。 (记住你可以在响应头中设置expires值) 浏览器不遵守过期标题存在问题,有时它们会获取缓存版本而不是新版本,即使它过去已过期。 (特别是较旧的IE需要一些额外的标题来解决这个问题,而且非常令人困惑)

这将导致每秒网址。并且永远不会缓存那个,因为URL不同(仅适用于time = .... part,但这足以强制新请求)。