我注意到一些浏览器(特别是Firefox和Opera)非常热衷于使用.css和.js文件的缓存副本,即使在浏览器会话之间也是如此.当您更新其中一个文件但用户的浏览器继续使用缓存副本时,这会导致问题.
问题是:在更改文件时,强制用户浏览器重新加载文件的最优雅方法是什么?
理想情况下,解决方案不会强制浏览器在每次访问页面时重新加载文件.我会发布自己的解决方案作为答案,但我很好奇,如果有人有更好的解决方案,我会让你的投票决定.
更新:
在这里讨论了一段时间后,我发现John Millikin和da5id的建议很有用.事实证明,有一个术语:自动版本控制.
我在下面发布了一个新的答案,它是我原来的解决方案和John的建议的组合.
SCdF建议的另一个想法是将伪造的查询字符串附加到文件中.(一些Python代码自动使用时间戳作为伪造的查询字符串由pi提交.).但是,有一些关于浏览器是否会使用查询字符串缓存文件的讨论.(请记住,我们希望浏览器缓存文件并在以后的访问中使用它.我们只希望它在更改后再次获取文件.)
由于不清楚伪造的查询字符串会发生什么,我不接受这个答案.
有没有办法可以在我的页面上放置一些代码,这样当有人访问某个站点时,它会清除浏览器缓存,以便他们可以查看更改?
使用的语言:ASP.NET,VB.NET,当然还有HTML,CSS和jQuery.
这就是我们如何防止浏览器缓存JS和CSS文件.这似乎有点hacky ..有更好的方法吗?
<%
//JSP code
long ts = (new Date()).getTime(); //Used to prevent JS/CSS caching
%>
<link rel="stylesheet" type="text/css" media="screen" href="/css/management.css?<%=ts %>" />
<script type="text/javascript" src="/js/pm.init.js?<%=ts %>"></script>
<script type="text/javascript" src="/js/pm.util.func.js?<%=ts %>"></script>
Run Code Online (Sandbox Code Playgroud)
更新:我们想要阻止缓存的原因是为了确保在我们执行新版本时加载更新版本的文件.
我的网站每天有 20 万活跃用户
我不久前读过一篇关于强制 javascript 和 PHP 缓存文件的文章。我以前从未需要缓存我的文件,但现在我正在处理传入和传出服务器的大量数据,我想将其中一些数据存储在客户端本地。
我不知道是否有更好的方法来做到这一点,但本质上,我正在考虑使用编写一个库
我对此非常感兴趣,最好是 JavaScript。
我想知道如何使用 JavaScript 缓存文件
在有人认为我正在重新发明轮子之前
(示例)我有几个 Javascript 文件,如果更新这些文件,浏览器将不会重新加载脚本,因为它已被缓存。通过版本控制,我可以管理用户何时需要重新加载缓存的数据。