从CDN加载JS文件,如何防止浏览器缓存?

时间:2016-01-15 15:06:01

标签: javascript cdn

每隔几个小时(或更少),我将更新一个包含JSON对象的javascript文件,该对象包含将出现在网站上的通知。这个JSON对象是我将定期更新的,因此它不能被浏览器缓存。

javascript将托管在CDN上,此文件将位于客户网站上,如:

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

如何在这种情况下阻止浏览器缓存?

我想最好的办法是让所有客户拥有相同的javascript文件,然后发出ajax请求来下载消息?这样&#34; my_file.js&#34;可以缓存,但ajax响应不会。

2 个答案:

答案 0 :(得分:2)

您可以在路径my_file.js?time = currentTime

之后添加时间戳

为了保持HTML清洁,你可以在另一个本地js文件中添加这样的东西

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

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

答案 1 :(得分:0)

这实际上取决于您使用的CDN和可用功能。一些方法:

  • 指示CDN将文件缓存大约一个小时,因此它会每小时自动获取一个新文件(假设有人请求)。这意味着用户不一定会立即得到更改,但会在您更改后半小时内完成
  • 除此之外,让CDN向最终用户发送“无缓存”Cache-Control标头。根据CDN,这只是你的来源发送的,你在CDN上使用一些覆盖(或者指示CDN通过头部缓存它的各种方法之一,例如Surrogate-Cache-Control)
  • 或者,上述版本控制/带时间戳的URL。这样做的缺点是它要求您更新对文件的任何引用以包含版本ID。如果您的页面是自动生成的,这很好。
  • 允许CDN无限期地缓存文件,但使用“清除”或“无效”功能强制CDN在下次请求时请求新版本。如果您有理由让文件更新超过几个小时或一天,这将主要适用。