优化网站设计(十六):为AJAX请求使用GET方法
前言
网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议。这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题。
作为通用的原则,雅虎的工程师团队曾经给出过35个最佳实践。这个列表请参考 Best Practices for Speeding Up Your Web Site http://developer.yahoo.com/performance/rules.html,同时,他们还发布了一个相应的测试工具Yslow http://developer.yahoo.com/yslow/
我强烈推荐所有的网站开发人员都应该学习这些最佳实践,并结合自己的实际项目情况进行应用。 接下来的一段时间,我将结合ASP.NET这个开发平台,针对这些原则,通过一个系列文章的形式,做些讲解和演绎,以帮助大家更好地理解这些原则,并且更好地使用他们。
准备工作
为了跟随我进行后续的学习,你需要准备如下的开发环境和工具
- Google Chrome 或者firefox ,并且安装 Yslow这个扩展组件.请注意,这个组件是雅虎提供的,但目前没有针对IE的版本。
- https://chrome.google.com/webstore/detail/yslow/ninejjcohidippngpapiilnmkgllmakh
- https://addons.mozilla.org/en-US/firefox/addon/yslow/
- 你应该对这些浏览器的开发人员工具有所了解,你可以通过按下F12键调出这个工具。
- Visaul Studio 2010 SP1 或更高版本,推荐使用Visual Studio 2012
- 你需要对ASP.NET的开发基本流程和核心技术有相当的了解,本系列文章很难对基础知识做普及。
本文要讨论的话题
这一篇我和大家讨论的是第十六条原则:Use GET for Ajax Requests (为AJAX请求使用GET方法)
我在之前的一篇文章中讨论到了AJAX (优化网站设计(十四):使AJAX调用尽可能利用缓存特性) , 在那篇文章中,我们探讨到了POST和GET这两种方式,对于AJAX利用缓存特性而言,是有不同的。
- POST请求,不能使用客户端缓存
- GET请求,可以使用客户端缓存(而且只要地址一样,它总是会使用客户端缓存)
从这个意义上说,使用GET会比POST而言,有更好的一个性能表现。(因为减少了请求数和数据的重复传输)。
与此同时,这条原则也提到另外一个有价值的信息:
when using XMLHttpRequest
, POST is implemented in the browsers as a two-step process: sending the headers first, then sending data. So it's best to use GET, which only takes one TCP packet to send (unless you have a lot of cookies).
在使用XMLHttpRequest(目前的AJAX都是基于它实现的)的时候,如果Method是POST,则浏览器实际上会有两个步骤,先发送头部信息,然后再发送数据(这个由于是浏览器行为,目前我这边也没有办法提供验证的方式)。但如果是使用GET的话,则只有一个TCP的包发送出去(除非有大量的Cookie),这样无疑可以提高性能。
【备注】一个TCP包的尺寸大约为1452字节。
当然,现实的项目中,并不是总能使用GET的,例如长度方面可能会有限制:
The maximum URL length in IE is 2K, so if you send more than 2K data you might not be able to use GET.
如果使用GET,还需要考虑版本更新的问题。这个在优化网站设计(十四):使AJAX调用尽可能利用缓存特性 中我已经提到过了。
实际上,除了POST,GET之外,HTTP协议还定义了其他一些方法(method),它们中的某一些还特别有用,有兴趣的朋友可以参考 http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html