2009-09-19 32 views
0

我試圖確保我的ASP.NET MVC網站的訪問者始終擁有最新的CSS和Javascript(而不是某些較舊的緩存版本)。確保客戶端更新CSS/JavaScript

我試圖通過在應用程序域啓動時生成種子值來實現此目的,並自動將它附加到CSS和Javascript URL(所以現在而不是/Content/All.js,鏈接是/Content/All.js ?549238等)。

不幸的是我只是通過螢火發現通過調試,這造成現在一個完整的下載請求時間(新的「種子」的反應是在所有不再緩存,但我只是想先檢查下載'更新'版本,但隨後再次緩存/只檢查是否有差異)。

我該如何實現我的目標,有沒有更好的方法來做到這一點?我需要客戶端總是請求最新的版本,但如果沒有發生變化,然後緩存。

編輯:這似乎與我的頁面通過SSL提供的事實有關。 I asked a follow up question here關於使用SSL啓用客戶端緩存。

回答

0

我認爲你生成的種子值是一個隨機數。將其替換爲版本號,以便僅在應用程序的版本號更改時重新下載。

/Content/All.js?appVer1.5

,當你修改應用程序,你可以更改爲類似

/Content/All.js?appVer1.6

+0

這不是隨機的。正如我所說的,當應用程序域正在初始化時,它只會以靜態方式生成一次。在w3wp進程的整個生命週期內,不能寫入或更改超過一次。 – Alex 2009-09-19 07:28:46

+0

即使它沒有真正回答我的問題......儘管是該領域的最佳/第一。 – Alex 2009-09-19 10:28:01

1

把版本號中的網址:foo.css?rev=348

- 編輯

你也可以使用你的構建工具(我實際上是用我寫的一個自定義的東西來做到這一點)實現這個很平凡。

- 編輯

而且如果你的船浮筒,這是也是如此。

0
  1. 使用文件內容的校驗和作爲數字,如All-a2a69e19d8628b65cb935708d64d7337.js。這種方式只在腳本內容發生變化時纔會改變。

  2. 創建一些負責生成JavaScript文件鏈接和/或<script>標記的機制。

這樣,在你的ASP.NET頁面中,有這樣的事:

<asp:ScriptTag source="All.js"/> 

它得到替換爲:

<script src="/All-a2a69e19d8628b65cb935708d64d7337.js" type="text/javascript"></script> 
+0

這有點可笑。爲什麼不使用最後修改日期,如果你打算這樣做呢? – 2009-09-19 07:42:25

+0

因爲,爲了識別文件中的變化,文件的修改時間比其內容更不準確? – 2009-09-19 07:50:22

+0

我不認爲在這種情況下準確性是一件大事。 – rahul 2009-09-19 07:54:00