Chinaunix首页 | 论坛 | 博客
  • 博客访问: 134367
  • 博文数量: 57
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 580
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-04 22:57
文章分类

全部博文(57)

文章存档

2011年(1)

2010年(1)

2009年(55)

我的朋友

分类: 系统运维

2009-09-24 17:47:03

让Ajax请求可以被缓存

Ajax一个主要的好处是它能及时反馈的用户体验,因为它可以异步请求后台web服务器。然而,使用Ajax不能保证用户玩着自己的手指头等着这些异步JavaScript和XML作出响应并返回。在很多的应用中,用户是否会等着取决于Ajax是如何被使用的。例如,在一个基于web的email客户端中用户会一直等到搜索email消息的Ajax请求全部返回为止。请记住一点:异步不等于及时。

为了改善性能,优化Ajax响应很重要。最重要的方法是利用响应缓存来改进Ajax的性能,如增加Expires头,Cache-Control头等。下面列举了另外一些方法:
  • 使用Gzip模块
  • 减少DNS查询
  • 压缩JavaScript
  • 避免重定向
  • 配置ETags头

看个例子。一个web2.0邮件客户端可能使用Ajax来下载用户的地址簿来做自动完成使用。如果用户在上次使用这个产品之后一直没有修改过地址簿信息,那么地址簿响应数据可以在cache里面读取,前提是那个Ajax请求返回的时候加了将来时间的Expires和Cache-Control头。浏览器必须知道什么时候用以前的cache内容,什么时候得发起一个新的请求。怎么实现呢?可以将用户地址簿的最后修改时间戳加在请求的URL里面,例如,&t=1190241612这样。如果上一次加载时修改时间没有变化的话,再次发起的请求就会从浏览器的cache里面读取了,这样就消除了额外的HTTP折返请求。如果修改时间变了,那么请求的URL就是新的,在浏览器的cache里面找不到可用的数据,浏览器就重新发起请求,更新整个数据。

甚至你的Ajax响应内容是动态生成或者是针对单个用户的,它们还是可以被cache的。这样做肯定能加速的web2.0应用。
阅读(1441) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~