【问题标题】:Javascript src with question mark [duplicate]带有问号的Javascript src [重复]
【发布时间】:2016-09-20 19:23:37
【问题描述】:

我有一个问题。在我目前正在处理的旧项目中,我发现了这段代码:

  <script type="text/javascript" language="Javascript" src='<%= Page.ResolveUrl("~/javascripts/CardConnectorManager.js?2016071203")%>'></script>

我有:

  • /javascripts/CardConnectorManager.js

但没有

  • /javascripts/CardConnectorManager.js?2016071203

那个问号在做什么,为什么有人写这样的东西? 也许这个文件只存在于某些 bulid 东西的服务器上?

【问题讨论】:

标签: javascript


【解决方案1】:

David R's answer 不错,不过我想补充一点:

缓存破解通常有两种方法:

  1. 重命名文件;
  2. 在文件末尾添加一些哈希。

在某些情况下,第一种方法可能更好 (see this question),但可能更痛苦。您将如何将此文件保存在版本控制中?如果有很多这样的文件怎么办?

第二种方法要容易得多。您只需添加类似app.js?_=&lt;some_string&gt; 的内容。 &lt;some_string&gt; 可以是任何东西:时间戳、内部版本号或只是一个随机字符串。

对于这种方法,您可能会发现使用 gulp-rev 等自动工具会更好。

更新:老实说,最好为项目中的所有静态设置一个修订号:html、图像、css、js。 有很多工具可以自动完成。

另外,还有一些技术,例如 Angular 开发人员有 $templateCache 服务,它允许开发人员将所有项目的 html(不包括 index.html)放在一个 js 文件中。

【讨论】:

    【解决方案2】:

    它指的是同一个CardConnectorManager.js 文件。

    为防止缓存,在调用.js 文件时添加日期/时间戳后缀是开发人员的常见做法。

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      基本上是以“?”结尾的JS文件(问号)后跟一些随机数用于强制刷新该特定文件的浏览器缓存。浏览器将下载的该网站的js文件存储在它的缓存中,为了强制刷新它以随机数为后缀。

      在您的示例中,如果您仔细观察,指定的数字只不过是日期时间戳,即 - 数字 2016071203 代表 - 2016-07-12 03。如果您在服务器上更新了此文件,则只需更新新的时间戳(您可以使用任何随机数)。时间戳一般用于避免数字重复。

      所以下次每当你在那个 JS 文件中进行更改时,只需更新那个数字,这样所有访问这个文件的客户端都会得到更新的 JS 代码,而不是缓存的代码。

      【讨论】:

        【解决方案4】:

        问号 (?) 仅用于处理缓存。它每次在浏览器上刷新文件。我们也使用相同的技术来刷新动态生成的图像。

        【讨论】:

          猜你喜欢
          • 2019-05-18
          • 2011-11-19
          • 2016-02-21
          • 1970-01-01
          • 2020-08-18
          • 2021-11-07
          • 1970-01-01
          • 2017-05-10
          • 2023-03-11
          相关资源
          最近更新 更多