2011-11-22 98 views
4

我一直在使用相當多的JQuery,KnockoutJS和其他JavaScript的東西,我正在構建一個Web應用程序。大多數JS都在它自己的獨立文件中。我遇到的問題是瀏覽器緩存這些文件,所以當我推送更改時,用戶在獲取更新的文件之前必須刷新幾次。最近,我對通過一些數據的方式進行了重大改變,文件的緩存版本導致了一些錯誤和更糟的情況,一些數據被擦除。如何在瀏覽器中強制刷新JavaScript文件?

人們如何處理這個問題?有沒有辦法強制刷新文件?

回答

6

不同的開發者會做不同的事情。官方的方式是玩nicley並使用HTTP頭。谷歌的HTTP頭和緩存問題,你應該沒問題,繼續以自己的方式。

但是,有些瀏覽器只是忽略你,所以如果即時通訊在實時環境中開發,我使用版本號來確保每個人都獲得最新的文件。所以你可能會稱你的原始「something.js?v = 1.0」。做一個小小的改變,然後將其改爲「?v = 1.1」..你明白了。因爲鏈接不同,所以在大多數情況下它應該完全忽略緩存。

我傾向於使用這兩種方法只是要爲確保儘可能

+0

請注意,使用?並不是所有的瀏覽器都會緩存,基本上沒有該文件的緩存。理想情況下,您可以在每次更改時將js文件重命名爲該文件,以便在文件未更改時支持緩存,並在緩存失效時將其無效。 –

5

我知道強制所有瀏覽器忽略緩存的唯一方法是向腳本標記添加某種唯一標識符。

有一兩件事你可以做的是通過GET PARAM添加時間戳或版本號並不意味着任何東西到服務器,或者只是改變腳本本身的文件名,如果這是可行的:

<script type="text/javascript" src="myscript.js?version=2.0"></script> 
<script type="text/javascript" src="myscript.js?ts=9342038423048"></script> 
<script type="text/javascript" src="myscript.2.0.js"></script> 

如果JS文件已經發生重大變化,儘管大多數瀏覽器應該足夠聰明以獲取新的副本......如果您有權訪問服務器(緩存過期等),還可以調整您的響應標頭

1

麻煩的是,當你執行對同一個URL請求GET瀏覽器會緩存。正如其他人所說,你可以附加一個時間戳作爲查詢參數。這會在URL更改時強制請求新的GET請求。

對於Ajax而言,有一個jQuery.ajax parameter,這是否對你

cacheBoolean默認:true,爲的dataType '腳本' 和 'JSONP'

false如果設置爲false,它會強制請求的頁面不被 瀏覽器緩存。將緩存設置爲false還會將查詢字符串參數 「_ = [TIMESTAMP]」附加到URL。

使用AJAX時,您應該使用此方法。否則,追加你自己的時間戳或修改標題(這應該在現代瀏覽器中工作)。

相關問題