讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議147:Ajax性能嚮導 >

建議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請求,確信只有當文件不在緩存之中時瀏覽器才將請求發送給服務器。這在服務器端也很容易實現,所有的語言都允許通過某種方法設置信息頭。這是保證數據被緩存的最簡單方法。