优化网站设计(十六):为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这个开发平台,针对这些原则,通过一个系列文章的形式,做些讲解和演绎,以帮助大家更好地理解这些原则,并且更好地使用他们。

准备工作

为了跟随我进行后续的学习,你需要准备如下的开发环境和工具

  1. Google Chrome 或者firefox ,并且安装 Yslow这个扩展组件.请注意,这个组件是雅虎提供的,但目前没有针对IE的版本。
    1. https://chrome.google.com/webstore/detail/yslow/ninejjcohidippngpapiilnmkgllmakh
    2. https://addons.mozilla.org/en-US/firefox/addon/yslow/
    3. 你应该对这些浏览器的开发人员工具有所了解,你可以通过按下F12键调出这个工具。
  2. Visaul Studio 2010 SP1 或更高版本,推荐使用Visual Studio 2012
    1. http://www.microsoft.com/visualstudio/eng/downloads
  3. 你需要对ASP.NET的开发基本流程和核心技术有相当的了解,本系列文章很难对基础知识做普及。

本文要讨论的话题

这一篇我和大家讨论的是第十六条原则:Use GET for Ajax Requests (为AJAX请求使用GET方法)

我在之前的一篇文章中讨论到了AJAX (优化网站设计(十四):使AJAX调用尽可能利用缓存特性) , 在那篇文章中,我们探讨到了POST和GET这两种方式,对于AJAX利用缓存特性而言,是有不同的。

  1. POST请求,不能使用客户端缓存
  2. 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

posted @ 2013-05-12 13:03  陈希章  阅读(1702)  评论(4编辑  收藏  举报