前端 - 关于引用样式文件或资源文件的版本号问题
習慣沉默
習慣沉默 2017-04-25 09:03:56
0
3
639

有时在引用样式文件或资源文件时会加上版本号
例如:
style.css?v=20140520
background: xxx.jpg?v=201140520
我是菜鸟,有这么几个困惑:

  • 这样的好处和必要性是什么?我只知道一点,避免用户端的缓存而使样式不刷新。请问还有别的考虑吗?
  • 在什么情况下是可以不加的,在什么情况下是必须加的?因为我在读别的网站源码的时候发现有些是加的,有些是不加的。
  • 服务器根据版本号返回相应版本的文件的机制是怎么样的?我之前对svn,git等版本管理工具的认识仅仅停留在团队代码协作工具上。是不是在这个机制里是svn起的作用?具体的流程是怎样的?
  • 如何确定版本号?我看很多代码加版本号的时候是加日期?还有别的方式吗?如何知道自己该加的版本号是什么?
習慣沉默
習慣沉默

Antworte allen(3)
Ty80

我们希望工程师源码是这么写的:

<script type="text/javascript" src="a.js"></script>

但是线上代码是这样的:

<script type="text/javascript" src="a_82244e91.js"></script>

其中”_82244e91”这串字符是根据a.js的文件内容进行hash运算得到的,只有文件内容发生变化了才会有更改。由于版本序列是与文件名写在一起的,而不是同名文件覆盖,因此不会出现上述说的那些问题。同时,这么做还有其他的好处:

线上的a.js不是同名文件覆盖,而是文件名+hash的冗余,所以可以先上线静态资源,再上线html页面,不存在间隙问题;
遇到问题回滚版本的时候,无需回滚a.js,只须回滚页面即可;
由于静态资源版本号是文件内容的hash,因此所有静态资源可以开启永久强缓存,只有更新了内容的文件才会
缓存失效,缓存利用率大增;
修改静态资源后会在线上产生新的文件,一个文件对应一个版本,因此不会受到构造CDN缓存形式的攻击

静态资源版本更新与缓存

某草草
  1. 你说的对,这样的好处和必要性就是避免用户端的缓存而使样式不刷新。其它都不重要。
  2. 如果有版本快速迭代的需求,建议加,以方便用户及时更新。如果是长时间无更新的页面不必加。
  3. 通常由发布、打包工具来负责输出具体的版本号。
  4. 可以选用版本管理工具的总体版本号,可以选用修改或打包日期号,可以选用任何自定义的版本号(比如在头文件里手动指定的版本号),总之按需自选。一般用日期号就可以了,比较简单。
世界只因有你
  1. 对于经常需要修改的静态文件。 每次修改过后自动生成新的版本号。 浏览器就会对新文件进行缓存。
    对于常用不变的这个就可以不加。 比如你用了不许要制定的第三方库 版本升级的频率不会很高。 这样的就可一不加。
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage