2010-06-29 187 views
4

我們在我們公司使用IIS7和dotnet 3.5來構建我們內部和外部客戶使用的不同Web應用程序。建議我們開始使用靜態內容緩存來緩存圖像和html文件。 我的理解是,在web.config文件中,我們可以設置cachecontrolmaxage來指定文件需要緩存的天數。 此外,建議我們通過傳遞一個參數myjsfile.js?verfile = 1234來調用這些靜態頁面,只要生成新文件的版本就可以更改它。靜態內容緩存

我希望我去上面的權利?現在正在尋找的是實現第二部分的更好方法,而不是每次創建新文件時都必須傳遞一個新版本號,否則我們可以通過其他方式部署該靜態文件,以便對靜態文件進行任何新的更改在生產環境中。我想要的是一種在生產環境中提升多個圖像和靜態文件的簡單方法,無需擔心更改版本號。

回答

1

由於IIS7的所有IIS配置都可以通過web.config文件應用,更具體的是system.webServer section。在這種情況下,您應該檢查Caching Section並創建一個custom profile(確保將varyByQueryString屬性設置爲true以使「?version = xxx」工作)。

進入部署問題時,需要更改url,因爲客戶端在緩存有效時不會檢查文件的新版本(並且您說可能需要將天設置爲緩存持續時間)。一個常見的模式是基於修改日期爲實例自動生成的URL,如果你原來的線路是:

<script src='functions.js' />

你可以將它更改爲:

<script src='<%=GetFilenameWithModificationDate("functions.js")%>' />

的功能應該得到的文件修改日期時間並將其追加到文件,所以如果文件是最後修改con 2010-01-01在10:12:34它應該產生這樣的事情:

<script src='functions.js?version=201001011' />

這樣,無論何時修改文件,都會包含新的查詢字符串並更新緩存。

由於您正在緩存您的靜態文件文件,我假設性能是一個考慮因素,所以您應該考慮檢查每個文件的修改日期的懲罰,並且您可能希望在輔助函數中使用緩存,控制或您決定使用哪種機制。

HTH

0

是的,有關在版本中使用查詢字符串的位是正確的,它的工作原理。但是,我不確定在web.config中更改設置是否實際適用於靜態內容。靜態內容的緩存由IIS管理員根據開發人員推薦的位置在我工作的位置管理。

目前我在一個地方管理版本號,並可以使用應用程序的管理界面進行控制。缺點是,一旦版本號發生變化,所有靜態文件的版本號就會在整個應用程序中發生變化。

或者,每個靜態文件都使用版本作爲文件名的一部分進行命名,因此一旦部署了內容,就不需要更改任何內容。但是,這也意味着引用靜態內容的代碼需要使用完整的文件名引用它們,並且在靜態內容更改時需要更改。

希望有所幫助。

0

請記住,IIS只會調用映射到asp.net ISAPI的文件的.NET運行時。因此靜態內容如.html,.jpg等不會受到任何web.config設置的影響。你可以映射它們,但你會以這種方式失去表現。可能不是最好的路線。

對於腳本代碼,我通常使用上面說的airmanx這樣的系統。 .config中的全局設置附加到URL,並在有新版本時更新。您可以通過獲取應用程序的內部版本號來自動執行此操作並將其傳入。

對於靜態內容,您可以考慮提供來自不同域(例如content.domain.com)的所有內容並管理標題在IIS中進行緩存,內容過期等。它是一個非常簡單的解決方案,不需要太多的開銷,但是如果需要過期內容,您必須讓您的操作人員參與其中。這不是一個完全自動化的解決方案,但我發現它在我工作過的大多數大型網站上運行得非常好。