在「How Google is wasting your bandwidth」看到有人發現 Google 所提供的 Google AJAX Libraries 有一些地方處理的非常極端,沒有注意的話反而會使得使用者多花不少頻寬在上面。
以 jQuery 為例,如果直接指定版本,使用 1.3.2:http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
,那麼 Expires
會設定一年左右的時間:
Last-Modified: Mon, 23 Nov 2009 18:54:21 GMT
Date: Mon, 30 Nov 2009 22:03:29 GMT
Expires: Tue, 30 Nov 2010 22:02:37 GMT
Cache-Control: public, must-revalidate, proxy-revalidate, max-age=31536000
X-Content-Type-Options: nosniff
但如果後面有 ?...
,像是加上了 ?ver=1.3.2
就會完全不一樣,完全不會 cache:
Last-Modified: Mon, 23 Nov 2009 18:54:21 GMT
Date: Mon, 30 Nov 2009 22:04:43 GMT
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Cache-Control: no-cache, must-revalidate
另外一個比較小的問題是 http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js
會指到 1.3 系列最新版本,是不會 fully-cache 的,每次都會 revalidate (最好的情況是 304 Not modified,傳輸量小於 1KB,比較差的情況是整個檔案重抓一次) 以確保 Google 更新時使用者就會馬上看到最新的檔案:
Last-Modified: Mon, 23 Nov 2009 18:54:21 GMT
Date: Mon, 30 Nov 2009 22:05:52 GMT
Expires: Mon, 30 Nov 2009 23:05:52 GMT
Cache-Control: public, must-revalidate, proxy-revalidate, max-age=3600
1.2.6 與 1.2 也是一樣的情況,要使用 Google 提供的 AJAX Libraries 要注意。
以目前 Google 所提供的平台,應該要使用指定完整版本 (像是 1.2.6 或是 1.3.2),且不帶任何 query string 的 request。