我一直在看一个HTML5样板模板(来自http://html5boilerplate.com/),并注意到当引用CSS和JavaScript文件时,"?v=1"
在URL中的使用。
"?v=1"
附加到CSS和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 -->
发布于 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当它发生变化时,您不必担心缓存头,浏览器会看到不同的查询字符串,并将其视为不同的新文件。
发布于 2010-08-12 19:12:53
这样可以确保您从服务器获取css或js文件的最新版本。
稍后,如果您有较新的版本和"?v=3", "?v=4"
,则可以附加"?v=2"
,依此类推。
请注意,您可以使用任何querystring
,'v‘不是必须的,例如:
"?blah=1
“也会起作用。
和
"?xyz=1002"
将起作用。
这是一种常见的技术,因为浏览器现在缓存js和css文件更好、更长。
发布于 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");
首先,把它很好地重构到属性/函数中,然后就可以开始了。别再找借口了。
祝你好运,阿特
https://stackoverflow.com/questions/3466989
复制相似问题