【问题标题】:What is the purpose of this query component in the HTML script tag?HTML 脚本标签中这个查询组件的用途是什么?
【发布时间】:2013-04-15 23:46:51
【问题描述】:

我正在阅读这个源代码:

https://github.com/leobalter/PimpMyCode/blob/master/index.html#L20

<script src="js/compiled.min.js?v=125" async></script>

如果您删除整行代码镜像部分将消失。但是您可以将数字更改为您想要的任何数字,并且文本框将保留。

?v=125 这样的查询在做什么?

我从未见过有人使用它。

【问题讨论】:

  • 您可能还看到文件名本身被修改为唯一值,例如js/compiled.min.v125.js

标签: javascript html http caching


【解决方案1】:

它会破坏浏览器缓存(即更改浏览器用来识别缓存文件的文件的 url,迫使浏览器在查询字符串值更改时重新下载文件。)

当您想要将更新部署到文件并让所有用户立即获得更改而不是等待他们的缓存清除或手动清除它时,这很有用。

值本身并不重要。它不会改变输出,服务器也不会使用它。它只是强制浏览器下载新版本。

【讨论】:

  • 谢谢。我听说过很多关于使用标头使缓存过期的信息。如果我正在部署一个静态站点,我可以看到它的简单性。在什么情况下我会使用标题?
  • 标头对于强制浏览器长时间缓存静态资产很有用,本质上与此相反。浏览器不必尊重标题,但它必须尊重查询字符串。
  • 我明白了。这种技术在任何地方都有记录吗?我正在尝试找到有关此的文档。如果你能找到它,那就太好了。还在尝试。
  • 谢谢。似乎很多人在搜索“cache js css”后都问过这个问题。
  • 是的,这是一个常见的问题,这是一个常见的解决方案。
【解决方案2】:

.js资源这样的静态文件通常被配置为被浏览器缓存很长时间(1年)。通过使用缓存中的资源,用户可以体验到更快的加载时间。

难题是:如果用户有我的 JavaScript 文件在缓存中,我如何保证更新后的文件立即被所有用户使用?

输入查询字符串参数。 ?v=125 是一个标识符,可能是某种版本号。当资源被修改和释放时,这个数字(或字符串)将变为一个新的、未使用的值。附加到资源名称的参数会导致缓存像全新文件一样处理资源。因此,即使用户在缓存中可能有script.jsscript.js?v=124script.js?v=125 也会直接从服务器加载,其中包含所有最新最好的代码。

接受的答案包含一个奇怪的短语。 “它破坏了浏览器缓存” 听起来很危险!没关系,因为这不是字面意思发生的事情。缓存没问题。事实上,旧的?v=124 文件还在!独特的资源命名方案只会导致无害的缓存未命中

【讨论】:

  • 感谢您的详细解释。是的,这很有帮助。现在想来,我在学习“高性能网站”时可能已经看过他的作品了。
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多