2016-01-15 195 views
1

每幾個小時(或更少取決於)我將更新一個JavaScript文件,其中將包含一個JSON對象,其中包含將出現在網站上的通知。這個JSON對象是我將定期更新的,所以它不能被瀏覽器緩存。從CDN加載JS文件,如何防止瀏覽器緩存?

的JavaScript將在CDN進行託管,而該文件將是像客戶網站:

<script src="//example.com/1.7.1/my_file.js"></script> 

我如何能夠防止瀏覽器緩存在這種情況?

我想最好的辦法是所有的客戶端都有相同的JavaScript文件,然後發出ajax請求來下拉消息?這樣可以緩存「my_file.js」,但ajax響應不會。

+3

您可以在網址末尾添加時間戳... – brso05

+0

@ brso05您應該將其作爲答案。 – LoremIpsum

回答

2

路徑my_file.js後?時間您可以添加時間戳= currentTime的

要保持清潔HTML,你可以在另一個本地JS添加這樣的文件

$("head").append('<script type="text/javascript" src="yourPath?time=' + Date.now() + '"></script>');

或者您可以使用$ .getScript,requirejs等。

+0

它甚至不需要是時間戳。只要任何GET參數更改,緩存的版本都會被丟棄。如果您使用帶'cache:false'選項的'.ajax()',jQuery會使用'&_ = '。字體真棒使用參數'v = 4.5.0'。 StackOverflow爲每個文件添加一個'v = ' –

0

這真的取決於您使用的CDN和特性es可用。一些方法:

  • 指示CDN將文件緩存大約一個小時,以便每小時自動獲取一個新文件(假設某人正在請求)。這意味着用戶不一定會立即獲得更改,但會在您更改的半小時內完成。
  • 除此之外,讓CDN向最終用戶發送「無緩存」緩存控制標頭。根據CDN的不同,這可能僅僅是您的原點發送的內容,您可以在CDN上使用一些覆蓋(或指示CDN通過標頭緩存它的各種方法之一,例如Surrogate-Cache-Control)
  • 或者,上面提到的版本/時間戳URL。這樣做的缺點是,它要求您更新對文件的任何引用以包含版本ID。如果你的網頁是自動生成的,這沒問題。
  • 允許CDN無限期地緩存文件,但利用「清除」或「無效」功能強制CDN在下次請求時請求新版本。這主要適用於如果您有理由讓文件不超過幾個小時或一天更新的情況。