如何防止缓存我的Javascript文件?

如何防止缓存我的Javascript文件?,javascript,caching,Javascript,Caching,我有一个简单的html: <html> <body> <head> <meta charset="utf-8"> <meta http-equiv='cache-control' content='no-cache'> <meta http-equiv='expires' content='0'> <meta http-equiv='pragma' content='no-cache'> <script s

我有一个简单的html:

<html>
<body>
<head>
<meta charset="utf-8">
<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>
<script src="test.js"></script>
</body>
</html>


在test.js中,我更改了一个Javascript函数,但我的浏览器正在缓存该文件。如何禁用脚本src的缓存

将随机查询字符串添加到
src

您可以通过在每次进行更改时增加查询字符串来手动执行此操作:

<script src="test.js?version=1"></script>

或者,如果您使用的是服务器端语言,则可以自动生成:

ASP.NET:

<script src="test.js?rndstr=<%= getRandomStr() %>"></script>

有关缓存破坏的更多信息,请参见此处:


您可以将查询字符串附加到您的src中,并仅在发布更新版本时对其进行更改:

<script src="test.js?v=1"></script>

通过这种方式,浏览器将使用缓存的版本,直到指定新版本(v=2,v=3…)

您可以向指向脚本的url添加随机(或日期时间字符串)作为查询字符串。像这样:

<script type="text/javascript" src="test.js?q=123"></script> 

每次刷新页面时,都需要确保“q”的值已更改。

为脚本发送缓存控制HTTP头

<script src="test.js?random=<?php echo uniqid(); ?>"></script>
HTML文档中的假标题:

  • 没有真正的HTTP头那么受支持
  • 应用于HTML文档,而不是它链接到的资源

  • 另一种解决方案是使用某种生成编号(如自开始以来的提交数量,或修订号/提交哈希)。通过这种方式,您将利用服务器端语言自动完成这项工作,但不会在没有任何实际更改时失去缓存的优势。但这需要,如前所述:版本控制(或其他一些更改跟踪)和服务器端处理。@t比这更好的是,使用内容的散列值,以便在需要时进行更新。可能会生成新的构建,但JS可能不会更改。ASP.NET捆绑和缩小功能内置了此功能。你们都错了@SébastienGarcia Roméo这是一个有效的选择。这是我在我的链接帖子中提出的一个选项。这个解决方案的一个恼人的方面是,Chrome将把它当作一个新文件。例如,如果设置了断点,下次重新加载时将丢失所有断点。我向脚本源添加了时间戳,但仍有几个用户需要启动F5或Ctrl+F5来获取新脚本。怎么样?(Intranet而非WWW)您最好将“LastWriteTimeUTC”unix时间戳放在其中,这样,只要脚本不变,它就会保持缓存状态。简单但很好的解决方案,谢谢。
    <script src="test.js?random=<?php echo filemtime('test.js'); ?>"></script>