2011-10-06 192 views
22

我注意到一些网站把版本号(特别是)放在CSS文件路径中。例如:为什么要将版本号添加到CSS文件路径?

<link rel="stylesheet" type="text/css" href="style.css?v=12345678" /> 

把版本号的主要目的是什么?如果目的是记住CSS文件上次更新的时间,那么不应该在CSS文件中添加版本号作为注释吗?

+0

的可能的复制[什么是追加“?V = 1”的链接和脚本标记CSS和Javascript的网址吗?](http://stackoverflow.com/questions/3466989/what-does-appending-v- 1-to-css-and-javascript-urls-in-link-and-script-tags-do) – zanetu

回答

38

http://html5boilerplate.com/docs/Version-Control-with-Cachebusting/

什么是V = 1" 是 JavaScript的/ CSS版本控制缓存无效化

为什么你需要缓存的JavaScript CSS网页 'V = 1?'?页面设计变得更加丰富和丰富,这意味着更多的脚本和样式表在 页面中。首次访问您的页面可能需要创建多个HTTP 请求,但通过使用Expires标头,您可以将这些组件设置为可缓存的 。这避免了不必要的在随后的页面 视图中发出ssary HTTP请求。过期标头最常用于图像,但它们应该用于所有组件,包括脚本,样式表等。

HTML5 Boilerplate如何处理JavaScript CSS缓存? HTML5 Boilerplate带有服务器配置文件:.htacess, web.config和nginx.conf。这些文件告诉服务器添加 JavaScript CSS缓存控件。

什么时候需要使用版本控制和cachebusting? 传统上,如果您使用远期过期标头,则必须在组件更改时更改组件的文件名。

如何使用cachebusting?如果你更新你的JavaScript或CSS,只需要 将“?v = 1”更新为“?v = 2”,“?v = 3”......这将欺骗浏览器 认为您正在尝试加载新文件,因此,解决缓存 的问题。

+9

你可以动态地使用PHP强制它在保存时更改版本号。以下是WordPress的一个例子。 '<链路的rel = “样式表的” href = “” 类型=” text/css“media =”screen,projection“/>' – Justin

+0

你能指导我如何添加版本变量。我的意思是它将如何工作。谢谢 –

5

它确保您拥有最新版本。如果您像以前一样更改网站并留下名称,那么浏览器可能不会注意到这一更改,并使用其缓存中的旧CSS。如果您添加版本,浏览器将下载新的样式表。

1

这是为了优化浏览器缓存。您可以为css文件设置标题永不过期,以便浏览器也可以从缓存中获取它。

但是,如果你这样做,你会在更改css文件时遇到问题,因为一些浏览器可能不会注意到这种变化。通过添加/更改版本参数,它是“另一个”请求,因此它不会被从cahe中取出(但是在新版本被缓存之后,它将从那里取出以节省带宽/请求数量,直到版本再次改变)。

详细的解释可以在html5boilerplate.com

0

被foudn我的知识是相当多了关于网站的日期,但存储在“HREF”参数变量是通过HTTP浏览器接收。在URL重写中使用通常的技巧,实际上可以有一个任意的脚本,在调用时会产生CSS输出。这个输出可能会有所不同,具体取决于参数。

2

其中一个原因可能是绕过文件缓存。同名的CSS文件可以被服务器缓存,并且如果新版本有布局变化,可能会导致显示不良。

相关问题