有时在引用样式文件或资源文件时会加上版本号
例如:style.css?v=20140520
background: xxx.jpg?v=201140520
我是菜鸟,有这么几个困惑:
我们希望工程师源码是这么写的:
<script type="text/javascript" src="a.js?1.2.1"></script>
但是线上代码是这样的:
<script type="text/javascript" src="a_82244e91.js?1.2.1"></script>
其中”_82244e91”这串字符是根据a.js的文件内容进行hash运算得到的,只有文件内容发生变化了才会有更改。由于版本序列是与文件名写在一起的,而不是同名文件覆盖,因此不会出现上述说的那些问题。同时,这么做还有其他的好处:
线上的a.js不是同名文件覆盖,而是文件名+hash的冗余,所以可以先上线静态资源,再上线html页面,不存在间隙问题;
遇到问题回滚版本的时候,无需回滚a.js,只须回滚页面即可;
由于静态资源版本号是文件内容的hash,因此所有静态资源可以开启永久强缓存,只有更新了内容的文件才会
缓存失效,缓存利用率大增;
修改静态资源后会在线上产生新的文件,一个文件对应一个版本,因此不会受到构造CDN缓存形式的攻击
静态资源版本更新与缓存