我正在研究一個解決方案來加速我們的網站。我在客戶端首先AJAX負載應用程序的預期的下一個頁面:Safari將URL#片段整合到其瀏覽器緩存中
$.ajax({url: '/some/real/path', ...});
服務器響應此並且包括在報頭中:
Cache-Control => 'max-age=20'
這標誌着響應爲是可緩存的。
客戶端應用程序然後等待查看它的預測是否正確,並在發現它是,它將瀏覽器轉換到同一頁面,但將一些信息作爲#片段添加到URL中,其中此信息是提供給我們,只有當用戶實際已經承諾他們的動作(即不可預測):
location.href = '/some/real/path#additionalInfoInFragement';
當瀏覽器過渡到片段中的其他信息是由頁面的JavaScript拿起和頁面努力實現那裏有一些效果。
對於所有瀏覽器,包括Safari,響應於起始AJAX請求被適當地插入到瀏覽器高速緩存中。
然後,對於除Safari瀏覽器所有瀏覽器,瀏覽器就會將該內容從緩存中,當我們實現放在location.href過渡到該頁面。這可以避免服務器受到攻擊,並且是我們加速的基礎。
Safari瀏覽器,雖然沒有使用高速緩存來重新服務於內容。它似乎被轉換的'#additionalInfoInFragment'部分絆倒了。它在構造緩存鍵時使用它來檢查現有的緩存內容。下面是從Safari的cache.db文件中的條目,這是我通過源碼甩:
* ajax request: INSERT INTO "cfurl_cache_response" VALUES(3260,0,-1982644086,0,'http://localhost:8080/TomcatScratchPad/EmptyPage','2012-05-14 07:01:10');
* location.href transition: INSERT INTO "cfurl_cache_response" VALUES(3276,0,-230554366,0,'http://localhost:8080/TomcatScratchPad/EmptyPage#wtf','2012-05-14 07:01:20');
另外值得注意的是,Chrome的正常運作,即使兩個份額的代碼的WebKit了大量的事實。
我非常感謝社會上有任何想法。謝謝!
我可以說:哇,你真的深入瞭解這一點。好一個。 –