【问题标题】:How do I force the refresh of javascript files in a browser? [duplicate]如何强制刷新浏览器中的 javascript 文件? [复制]
【发布时间】:2012-01-04 01:26:52
【问题描述】:

我一直在为我正在构建的网络应用程序使用相当多的 JQuery、KnockoutJS 和其他 JavaScript 东西。大多数 JS 都在其自己漂亮的单独文件中。我遇到的问题是浏览器缓存了这些文件,所以当我推送更改时,人们必须刷新几次才能获得更新的文件。最近我对一些数据的传递方式进行了重大更改,文件的缓存版本导致了一些错误,更糟糕的是,一些数据被删除了。

人们如何处理这个问题?有没有办法强制刷新文件?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    不同的开发者做不同的事情。官方的方式是玩nicley,使用HTTP headers。谷歌 http 头和缓存问题,你应该可以继续自己的方式。

    但是有些浏览器会忽略你,所以如果我在实时环境中开发,我会使用版本号来确保每个人都能获得最新的文件。所以你可以称你原来的“something.js?v=1.0”。做一个小改动,然后将其更改为“?v = 1.1”..你明白了。由于链接不同,在大多数情况下应该完全忽略缓存。

    我倾向于同时使用这两种方法,只是为了尽可能确定

    【讨论】:

    • 注意使用时?并非所有浏览器都会缓存,基本上不会缓存该文件。理想情况下,您会在每次更改文件时重命名 js 文件,以在文件未更改时支持缓存,并在文件更改时使缓存无效。
    【解决方案2】:

    我知道强制所有浏览器忽略缓存的唯一方法是向脚本标签添加某种唯一标识符。

    您可以做的一件事是通过 GET 参数添加时间戳或版本号,这对服务器没有任何意义,或者如果可行,只需更改脚本本身的文件名:

    <script type="text/javascript" src="myscript.js?version=2.0"></script>
    <script type="text/javascript" src="myscript.js?ts=9342038423048"></script>
    <script type="text/javascript" src="myscript.2.0.js"></script>
    

    如果对 JS 文件进行了重大更改,尽管大多数浏览器应该足够智能以获取新副本...如果您可以访问服务器(缓存过期等),您还可以调整响应标头

    【讨论】:

      【解决方案3】:

      问题在于,当您对同一 URL 执行 GET 请求时,浏览器会缓存。正如其他人所说,您可以附加时间戳作为查询参数。由于 URL 已更改,这会强制发送新的 GET 请求。

      对于 ajax,有一个 jQuery.ajax parameter 可以为你做这件事

      cacheBoolean 默认值:true,对于 dataType 'script' 和 'jsonp' 为 false

      如果设置为 false,它将强制请求的页面不被缓存 浏览器。将缓存设置为 false 还会附加一个查询字符串参数, “_=[TIMESTAMP]”,指向 URL。

      在使用 AJAX 时,您应该使用此方法。否则,附加您自己的时间戳或修改标头(在现代浏览器中应该可以使用)。

      【讨论】:

        猜你喜欢
        • 2012-07-13
        • 1970-01-01
        • 2018-08-24
        • 2019-12-03
        • 2017-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-18
        相关资源
        最近更新 更多