前端 - 关于引用样式文件或资源文件的版本号问题

 bj韩式尕伙 发布于 2022-10-26 19:41

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

  • 这样的好处和必要性是什么?我只知道一点,避免用户端的缓存而使样式不刷新。请问还有别的考虑吗?
  • 在什么情况下是可以不加的,在什么情况下是必须加的?因为我在读别的网站源码的时候发现有些是加的,有些是不加的。
  • 服务器根据版本号返回相应版本的文件的机制是怎么样的?我之前对svn,git等版本管理工具的认识仅仅停留在团队代码协作工具上。是不是在这个机制里是svn起的作用?具体的流程是怎样的?
  • 如何确定版本号?我看很多代码加版本号的时候是加日期?还有别的方式吗?如何知道自己该加的版本号是什么?
3 个回答
    1. 对于经常需要修改的静态文件。 每次修改过后自动生成新的版本号。 浏览器就会对新文件进行缓存。
      对于常用不变的这个就可以不加。 比如你用了不许要制定的第三方库 版本升级的频率不会很高。 这样的就可一不加。
    2022-11-12 01:40 回答
    1. 你说的对,这样的好处和必要性就是避免用户端的缓存而使样式不刷新。其它都不重要。
    2. 如果有版本快速迭代的需求,建议加,以方便用户及时更新。如果是长时间无更新的页面不必加。
    3. 通常由发布、打包工具来负责输出具体的版本号。
    4. 可以选用版本管理工具的总体版本号,可以选用修改或打包日期号,可以选用任何自定义的版本号(比如在头文件里手动指定的版本号),总之按需自选。一般用日期号就可以了,比较简单。
    2022-11-12 01:40 回答
  • 我们希望工程师源码是这么写的:

    <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缓存形式的攻击

    静态资源版本更新与缓存

    2022-11-12 01:40 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有