代码之家  ›  专栏  ›  技术社区  ›  tincho87

避免Javascript/Css缓存

  •  6
  • tincho87  · 技术社区  · 6 年前

    我已经对此进行了很多搜索,但我找不到任何真正有效的解决方案:我们正在使用大量javascript/css文件构建一个web应用程序,这些文件可以随时修改。问题是,我们需要客户端的浏览器始终获取脚本的最新版本。

    我们尝试添加GET查询(?v=CurrentDate),但浏览器会一直加载旧脚本,直到您点击刷新几次或按CTRL+F5。

    我们要避免的一件事是将这些文件存储在不同的文件夹中,如/scripts/v1。0/,然后是/脚本/v2。0/。。。

    我们正在使用ASP。NET MVC 5、Bootstrap和JQuery。重要的一点是:我们只想避免一些脚本/css缓存,而不是所有的缓存。

    我真的很感谢你的帮助! 谢谢

    1 回复  |  直到 6 年前
        1
  •  6
  •   tao    6 年前

    浏览器缓存是浏览器存储远程资源结果的能力。这个过程很简单:它记住 url 已从和请求资源。如果在缓存资源时,再次请求该资源,而不是进行调用,则浏览器将为缓存中保存的副本提供服务,因为这样可以节省带宽和时间。

    如果添加的参数为 始终唯一 对于资源调用,浏览器将始终重新加载它,因为参数将更改,并且浏览器将假定它是不同的资源。

    通常情况下 timestamp 在秒(php时间戳)或毫秒(javascript时间戳)内,将确保始终重新加载您的资源:

    JavaScript:

    <script src id="myScript"></script>
    <script type="text/javascript">
       // change path to match your file:
       let resourcePath = '/js/someScript.js';
    
       document.getElementById('myScript').src = resourcePath + '?v=' + Date.now();
    </script>
    

    PhP:

    <script src="/js/someScript.js?v=<?=time();?>"></script>
    

    注意:您可以对任何其他资源执行相同的操作( .css 或媒体资源),以禁用缓存。另请注意,从技术上讲,您并没有禁用缓存-这并不容易做到,而且不同浏览器的情况有所不同。您允许缓存,但总是请求不同的资源,因为它有一个不断变化的伪参数(可以从 v 其他任何事情,例如 ?no-cache= )。