前言
網站設計的最佳化是一個很大的話題,有一些通用的原則,也有針對不同開發平台的一些建議。這方面的研究一直沒有停止過,我在不同的場合也分享過這樣的話題。
作為通用的原則,雅虎的工程師團隊曾經給出過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
- http://www.microsoft.com/visualstudio/eng/downloads
- 你需要對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