首页 > 有哪些比较好的管理网站静态文件版本的方案?

有哪些比较好的管理网站静态文件版本的方案?

<link rel="stylesheet" media="all" href="http://sfault.com/css/style.css?11.12.22.1">

可能标题表达的不够正确,正如上面代码所指的那样,为了修改用户本地的缓存文件,使用了修改请求地址的方法。可能是增加一个版本号,也可能使用一个时间戳。

我现在的情况是这样:
静态文件的发布和网站动态文件的发布是分开的,静态文件上传到CDN后,就直接把相应地址提供给后端开发人员,他们不关心静态文件放在哪里,文件什么版本。

如果静态文件有修改,前端人员会处理好后直接上传CDN(比较频繁),我们现在还没有一个方案来解决修改动态文件里的链接地址,除非手动去修改动态文件里的内容,让动态文件也去发布一下(动态文件的发布比较繁琐)。

可能有朋友想增加统一的配置信息,但这样有个问题,不能针对某个文件单独处理。

所以想咨询一下大家有没有比较好的方案来解决这个问题,是依赖完善的CMS呢,还是有什么工具可以完成这个工作?

谢谢!


改了静态文件,又不想改动态文件
貌似可行的办法就是在中间增加一个转发的步骤。
动态文件----->版本配置文件------>静态文件
这样的话,前端修改了静态文件,可以刷新一下版本配置文件。不需要修改和发布动态文件。
动态文件每次都是根据版本配置文件去拉取对应的版本号。

至于具体的实现手段就不清楚了,楼上@yanyaoer同学说的是一种方式


采用文件hash值


这种需求很常见 但解决的方法 需要看当时的环境
像@yanyaoer 说的这个方法 需要CDN满足支持带参数的URL 即domain/css/1.css?v=1 和domain/css/1.css?v=2 在CDN上存储为不同的内容 但后端取的是同一个物理文件 那么使用他说的这个方法就是比较智能的刷新缓存了。

但有另外一种情况(就像亚马逊的cdn cloudfront) 就是CDN不支持带参数的 如domain/css/1.css?v=1 domain/css/1.css?v=2 在CDN内容里面都存储为domain/css/1.css 这样后端物理文件如何变(文件名相同)都不会更新缓存 除非CDN提供清空缓存的方式 (暂时亚马逊的更新 只能使用版本当目录的方式 即domain/css/1/1.css domain/css/2/1.css 使用rewrite方式 或者程序支持转换 因为亚马逊的缓存清空是很慢的)

当然还有一种即时清空缓存的需求 就是在更新一个静态文件的时候就去调用CDN清空缓存的API 并且可以达到清空单个文件的缓存 这个只要CDN提供商支持就可以 之前自己用varnish做CDN 就设计了这个效果非常的不错


现在用的 tornado 框架里有个的 static_url() 专门用来引用静态文件

<link href="{{ static_url('css/bootstrap.css') }}" rel="stylesheet">

它通过 get_version() 建立一个列表来存储静态文件的 md5_hash 前5位并当作签名来生成引用地址

<link href="css/bootstrap.css?v=1db64" rel="stylesheet">

当代码更新后(这里需要手动或者自动 reload 一次)检测到文件有改动, hash值就更新成了新的

<link href="css/bootstrap.css?v=d8964" rel="stylesheet">
【热门文章】
【热门文章】