首页 » 编写高质量代码:改善JavaScript程序的188个建议 » 编写高质量代码:改善JavaScript程序的188个建议全文在线阅读

《编写高质量代码:改善JavaScript程序的188个建议》建议147:Ajax性能向导

关灯直达底部

一旦选择了最合适的数据传输技术和数据格式,就要开始考虑其他的优化技术。这些技术要根据具体情况使用,在考虑使用它们之前首先应确认应用程序是否适合这些概念。

有两种主要方法避免发出一个不必要的请求:

❑在服务器端,设置HTTP头,确保返回报文将被缓存在浏览器中。

❑在客户端,对于本地缓存已获取的数据,不要多次请求同一个数据。

第一种方法最容易设置和维护,而第二个方法提供了最大程度的控制。

如果希望Ajax响应报文能够被浏览器所缓存,必须在发起请求时使用GET方法。这还不够,必须在响应报文中发送正确的HTTP头。Expires头告诉浏览器应当缓存响应报文多长时间,其值是一个日期,当过期之后任何对该URL发起的请求都不再从缓存中获得,而要重新访问服务器。一个Expires头如下:


Expires:Mon,28 Jul 2014 23:30:00 GMT


这个特殊的Expires头告诉浏览器缓存此响应报文直到2014年7月28日。这就是所谓的遥远未来Expires头,用于缓存那些永不改变的内容,如图片和静态数据集。

Expires头中的日期是GMT日期,它在PHP中使用如下代码设置:


$lifetime=7*24*60*60;//7天,秒数

header('Expires:'.gmdate('D,d M Y H:i:s',time+$lifetime).'GMT');


以上代码告诉浏览器缓存此数据7天。要设置一个遥远未来Expires头,可以将它的生命期设得更长。下面的例子告诉浏览器缓存文件10年:


$lifetime=10*365*24*60*60;//10年,秒数

header('Expires:'.gmdate('D,d M Y H:i:s',time+$lifetime).'GMT');


一个Expires头是确保浏览器缓存Ajax响应报文最简单的方法。不需要改变客户端的任何代码,可继续正常地使用Ajax请求,确信只有当文件不在缓存之中时浏览器才将请求发送给服务器。这在服务器端也很容易实现,所有的语言都允许通过某种方法设置信息头。这是保证数据被缓存的最简单方法。