2009-07-13 126 views
2

你有什麼技巧讓Web應用程序的緩存部分恰到好處?如何處理瀏覽器緩存?

使失效日期過長,我們會有很多陳舊的緩存,太短了,我們冒着服務器重載不必要的請求的風險。

如何確保所有更改都會刷新所有緩存?

如何將SVN修訂版嵌入代碼/網址?

是否有多個版本並行確實有助於解決版本不匹配問題?

回答

1

我認爲你在正確的軌道上把版本號放在你的js css文件上。你可能需要使用一個構建工具把所有這一切共同爲你喜歡http://ant.apache.org/http://nant.sourceforge.net/

+0

你如何建議把版本號?我聽說過提交腳本,它會在您提交時修改代碼,但我並不十分理解這個想法,因爲您提交的內容並不是您最終獲得的內容。 – 2009-07-13 20:23:26

1

夫婦的方式來解決這個問題:如果

以下有關使用版本#分別給出的線索,在構建環境中給您帶來困難,在URL的末尾添加URL參數也同樣有效。瀏覽器客戶端將在每個URL中使用與緩存中的URL no不同的版本參數,並將再次下載該文件。對於靜態內容,服務器不會關心參數是否存在。

因此,例如,http://mydomain.com/js/main.js可以作爲http://mydomain.com/js/main.js?v1.5包含在您的HTML中。您可能更容易將版本號傳遞到您的服務器端腳本中,並將它們附加到您的客戶端包含URL中。

我見過的第二種方法很好用,就是使用控制器serverside來提供代碼。 Facebook使用這個。您將在腳本標籤中看到包含所有時間以「.php」結尾的腳本標籤。

例如

<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script> 

它們的後端根據請求中發送的環境確定需要發送給客戶端的JS。

+0

這會大大增加開銷嗎? – cdm9002 2009-07-13 18:00:04

2

看看minify項目。它是用PHP編寫的,但你可以用它作爲任何語言的藍圖。

主要特點:

  • 一個配置文件,以&縮小几個JS和CSS文件合併成一個
  • 始終使用最後一次修改文件的最後修改日期在配置組作爲一個URL參數

例如資源可能看起來像

<script type="text/javascript" src="/min/g=js1&1248185458"></script> 

這將獲取您的配置中的'js1'組的JavaScript文件,版本號爲「1248185458」,它實際上只是最後修改日期,轉換爲紀元時間。

當你把你的生產服務器更新js文件,他們就必須自動成爲一個新的版本號的新修改的日期 - 沒有過時的緩存,沒有手動版本

這是一個非常酷的項目,有一些關於優化和緩存的深思熟慮的想法。我已經稍微修改了這個過程,將YUI compressor插入到構建過程中。您可以通過修改服務器的標頭(herehere)以阻止來自瀏覽器的最後一次修改查找進行優化。

+0

有趣的,任何.NET端口? – 2009-07-21 15:28:10