首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在链接和脚本标记中将"?v=1“附加到CSS和JavaScript URL有什么作用?

在链接和脚本标记中将"?v=1“附加到CSS和JavaScript URL有什么作用?
EN

Stack Overflow用户
提问于 2010-08-12 19:11:57
回答 8查看 122.2K关注 0票数 146

我一直在看一个HTML5样板模板(来自http://html5boilerplate.com/),并注意到当引用CSS和JavaScript文件时,"?v=1"在URL中的使用。

  1. 在链接和脚本标记中将"?v=1"附加到CSS和JavaScript URL有什么作用?
  2. 并不是所有的JavaScript URL都有"?v=1" (以下示例中的示例:js/modernizr-1.5.min.js)。这是有原因的吗?

来自其index.html的样本

<!-- CSS : implied media="all" -->
<link rel="stylesheet" href="css/style.css?v=1">

<!-- For the less-enabled mobile browsers like Opera Mini -->
<link rel="stylesheet" media="handheld" href="css/handheld.css?v=1">

<!-- All JavaScript at the bottom, except for Modernizr which enables HTML5 elements & feature detects -->
<script src="js/modernizr-1.5.min.js"></script>

<!------ Some lines removed ------>

<script src="js/plugins.js?v=1"></script>
<script src="js/script.js?v=1"></script>

<!--[if lt IE 7 ]>
  <script src="js/dd_belatedpng.js?v=1"></script>
<![endif]-->


<!-- yui profiler and profileviewer - remove for production -->
<script src="js/profiling/yahoo-profiling.min.js?v=1"></script>
<script src="js/profiling/config.js?v=1"></script>
<!-- end profiling code -->
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-08-12 19:14:47

这些通常是为了确保当网站使用新版本更新时,浏览器会获得新版本,例如,作为构建过程的一部分,我们会有如下内容:

/Resources/Combined.css?v=x.x.x.buildnumber

由于每次推送新代码时都会发生变化,因此客户端不得不获取一个新版本,这仅仅是因为querystring。例如,请查看此页面(在回答此问题时):

<link ... href="http://sstatic.net/stackoverflow/all.css?v=c298c7f8233d">

我认为这个团队使用的不是修订号,而是文件散列,这是一种更好的方法,即使是在新的版本中,浏览器也只有在文件实际发生变化时才会强制获取新版本。

这两种方法都允许您将缓存头设置为非常长的值,比如20 years...yet当它发生变化时,您不必担心缓存头,浏览器会看到不同的查询字符串,并将其视为不同的新文件。

票数 187
EN

Stack Overflow用户

发布于 2010-08-12 19:12:53

这样可以确保您从服务器获取css或js文件的最新版本。

稍后,如果您有较新的版本和"?v=3", "?v=4",则可以附加"?v=2",依此类推。

请注意,您可以使用任何querystring,'v‘不是必须的,例如:

"?blah=1“也会起作用。

"?xyz=1002"将起作用。

这是一种常见的技术,因为浏览器现在缓存js和css文件更好、更长。

票数 26
EN

Stack Overflow用户

发布于 2011-02-09 00:10:37

当你想知道本地web文件夹中文件的版本时,散列解决方案很不错,但不是真正的人类可读的。解决方案是使用date/time标记您的版本,以便您可以轻松地将其与您的服务器文件进行比较。

例如,如果.js or .css文件的日期为2011-02-08 15:55:30 (上次修改),则版本应等于.js?v=20110208155530

应易于读取任何语言的任何文件的属性。在ASP.Net中,这真的很简单...

".js?v=" + File.GetLastWriteTime(HttpContext.Current.Request.PhysicalApplicationPath + filename).ToString("yyMMddHHHmmss");

首先,把它很好地重构到属性/函数中,然后就可以开始了。别再找借口了。

祝你好运,阿特

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3466989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档