2012-07-12 52 views
3

我有一個web應用程序,它使用require.js(除了幾個CDN提供的資源外)。我正在使用優化工具來創建「發佈」網站。Cache破壞了由Require.js優化的網站

我擔心的是,當新版本的Web應用程序發佈時,用戶將無法獲得更新的js文件,因爲它們將被瀏覽器緩存。

開發應用程序時,問題非常明顯,除非使用'urlArgs'配置選項。

通常的解決方案是在腳本引用中附加一個?v = 1.0的查詢字符串,但是因爲它們都是通過require.js處理的,所以沒有辦法做到這一點。

所以,我的問題是如何確保客戶端在新版本發佈時下載新版本的js/css文件?

+0

爲什麼不直接使用你提到的urlArgs選項? – 2012-07-13 12:34:13

+1

@SimonSmith urlArgs無法在優化時使用 – Dve 2012-07-13 12:38:32

回答

1

如果您使用require.js,則必須使用require對象設置「胸圍」urlArgs。像這樣:

<script> 
    var require = { 
     urlArgs : "bust=" + releaseVersion 
    }; 
</script> 

我在CSS和圖像類似的情況。如果您的Web應用程序位於Apache後面,則可以在mod_headers模塊中將緩存控制標頭設置爲http響應。就我而言,我的web應用程序不在Apache之後。我直接擊中了Glassfish。所以我最終添加了一個Servlet過濾器,並在將每個CSS和圖像響應轉發到過濾器鏈之前手動添加緩存控制頭。此後,當曾經有一個CSS改變,我只是在HTML中添加URL參數,像這樣:

<... "main.css?version=release10" /> 

瀏覽器看到這個URL變化並獲取從服務器的CSS。圖像也是如此。對於JS,你必須更新「胸圍」值。