2014-07-23 88 views
0

我正在做一些關於如何正確緩存AJAX響應的研究,因爲這會加速有很多AJAX請求的頁面。我在雅虎網站上發現了這件作品:如何正確緩存AJAX

讓我們來看一個例子。 Web 2.0電子郵件客戶端可能使用Ajax來下載用戶的通訊簿以進行自動完成。如果用戶自上次使用電子郵件Web應用程序以來未修改過她的地址簿,則可以從緩存中讀取以前的地址簿響應,如果該Ajax響應可以使用未來的Expires或Cache-Control標頭進行緩存的話。必須通知瀏覽器何時使用先前緩存的地址簿響應與請求新的響應。這可以通過向地址簿Ajax URL添加時間戳來指示用戶最後一次修改地址簿的時間戳,例如,& t = 1190241612。如果地址簿自上次下載以來尚未修改,則時間戳將相同,並且地址簿將從瀏覽器的緩存中讀取,從而消除額外的HTTP往返。如果用戶修改了她的地址簿,則時間戳會確保新的URL與緩存的響應不匹配,並且瀏覽器將請求更新的地址簿條目。

這使得它不太清楚。我想知道這一切的原因是,我正在構建一個簡單的網頁,用戶可以在網頁上添加快捷方式。他們看到一個網格圖標,可以點擊或搜索他們需要的網站。這只是作爲一個項目去了解PHP,最重要的是AJAX更好;沒有任何實際的用戶會看到。

正如你可以想象的那樣,搜索功能讓網站變慢了很多。特別是因爲它在之後每鍵入的字母執行AJAX請求。因此,我認爲如果緩存一些部分,網站會大大改善。

回答

0

你必須讓你的心第一次:

你想使用的緩存的響應,或者你希望服務器每次創建一個新的嗎?

我不清楚你究竟在問什麼。你想要緩存什麼,多長時間?

  • 如果您想要一個緩存響應,只需使用您以前使用的URL。 (在組合的到期頭)

例如: http://www.example.com/myAjaxHelper.php?q=ab

如果服務器響應與一個Expires頭,說:「一週內從現在的」,你會得到一個星期緩存的響應。你的瀏覽器會這樣做。 (請記住,您可以在響應標頭中設置expires值) 瀏覽器不尊重expires標題有問題,並且有時它們會獲取緩存版本而不是新版本,即使它過去已過期。 (尤其是老年IE需要一些額外的標題來解決這個問題,這是非常令人困惑)

這將導致一個新的URL每一秒。而且這個永遠不會被緩存,因爲這個URL是不一樣的(只限於time = ....部分,但這足以強制一個新的請求)。