标题引入js文件加版本号
背景
在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、js等,而不必从你的服务器读取,这样在一定程度上加快了网站的打开速度,又可以节约一下你的服务器流量。
问题
现在问题来了,.htaccess设置的css、js缓存都有一个过期时间,如果在访客的浏览器中已经缓存了css、js,在这些css、js缓存未过期之前,浏览器只会从缓存中读取css和js,如果你在服务器上修改了css和js,那么这些更改在回头客的浏览器中是不会有变化的,除非回头客按了Ctrl + F5刷新了你的网站页面或者手动清空了浏览器的缓存。一个网站的访客成千上万,回头客也会有不少,你不可能在更新css后让每个访客都刷新一下缓存吧,那么这个问题你会怎么处理呢?
方法一
更改css文件名:其实解决这个问题很简单,缓存是通过文件名标记缓存的内容的。在你更新了网站的css文件内容后,在更换一下css的文件名就可以了。如原先html中的css调用语句如下:
方法二
给css文件加个版本号:其实每次修改css文件后还要修改css的文件名有点麻烦,那么我们可以在加载css语句中加入个版本号(即css链接中?后面的内容)就可以了。如原先html中的css调用语句如下:
总结
其实css文件后面的问号起不到实际作用,仅能当作后缀,如果用问号加参数的方法,可以添加版本号等信息,同时可以刷新一下浏览器端的缓存。一个小小的细节,可以给我们带来很大的方便。
<maven 关于构建版本号,以及在构建的时候压缩css,js并为这些文件追加版本号>
最近负责公司一个项目框架的搭建,由于我们这边是后端团队,没有专业的前端工程师支持我们,我就在这个搭建过程中遇到了一些前端问题,给大家分享一下。
主要分享点:
构建项目时自动在css,js文件名中加入版本号 解决新上线版本时,浏览器可以更新缓存
构建项目自动压缩css,js资源文件 加快响应速度
解决第一个问题,是在构建的时候必须生成一个构建版本号,比如构建时刻的timestamp,正好在网上看到这样的插件,配置信息如下
org.codehaus.mojo
buildnumber-maven-plugin
1.3
validate
create-timestamp
{0,date,yyyy-MM-dd HH:mm:ss}
timestamp
这个插件的作用是在构建的时候在maven的生命周期validate阶段生成一个版本号,当你需要这个版本号的时候你可以通过${timestamp}引入,具体这个插件的使用可以查看官网: http://mojo.codehaus.org/buildnumber-maven-plugin/index.html
有了这个版本号,接下来的问题就是在每个页面引入css,js的文件可以被copy一份名字以xx.{version}.css,xx.${version}.js的文件,这就要用到第二个插件了,看下面的配置信息:
net.alchim31.maven
yuicompressor-maven-plugin
1.5.0
${assert.compress}
compress
.${timestamp}
true
utf-8
**/*.pack.js
**/compressed.css
**/*.min.css
**/*.min.js
这个插件不但解决我上面分享里写的第二个压缩css,js文件,同时还可以把压缩后的文件名追加版本号,有了这个插件真是太好了,关于这个插件具体使用信息请看:http://davidb.github.io/yuicompressor-maven-plugin/index.html
看下下面的构建信息,注意框框里面的内容,可以看到jquery-ui.js被压缩成以文件名jquery-ui.1414549216019.js命名的文件,同时这个插件还打印出了其它一些信息。
到这里,想要的样式文件都已经有了,紧接着要做的是怎么在文件内进行替换
转自两位大神:
http://www.ludou.org/css-version.html
http://blog.youkuaiyun.com/wangjuntytl/article/details/40862259