解决 Web 缓存的 Python 脚本
源码地址
作用
- 通过脚本,为文件中的 URL 添加版本号,解决移动端使用缓存,不显示最新效果的问题。
- 添加后缀为「js」「html」「css」「png」「jpg」「jpeg」链接的版本号。
定位
- vue 脚手架本身就自带这个功能,gulp 也有类似的功能。为什么要重复造轮子?
- 因为 vue,gulp 等,需要 npm 下载各种依赖包。对于只有几个页面的微小型项目。为此添加脚手架性价比不高。
- 本脚本不需要添加任何依赖。在 linux 和 mac 等自带 python 环境的系统中,可直接运行。简单便捷。
- 本脚本可以放在 linux 中,结合 jenkins 发布系统等,进行自动化发布。
原理
- 通过在 URL 链接中添加版本号,让浏览器当做全新的资源。绕过浏览器缓存,从服务器重新获取文件。以解决缓存问题。
- 版本号添加的是,文件对应的 hash 值。故文件内容未发生变化时。URL 将不会发生变化。会复用浏览器中缓存的文件。合理利用缓存。
- 工具只会添加目标文件夹中存在的文件,的链接。因为通常访问的外部链接,是第三方资源,不会轻易改变,故不存在缓存问题。
使用方法
注意,工具会在源文件中进行替换,注意备份源文件。否则会被污染。
python changeVersion.py '目前文件夹绝对路径'
代码解析
- 递归遍历目标文件夹中的所有文件。
- 用字典(或者叫对象)保存每个文件的「文件名」及「文件内容hash」。
- 再次递归遍历目标文件夹中的所有文件。
- 遍历文件内容,通过正则匹配里面所有的 URL,通过「文件名」查询前面保存的字典,是否有对应的 hash 值。
- 如果有 hash 值,则证明该文件是内部文件,可能被改动,往 URL 中添加版本号,version=${hash}。以解决文件缓存问题。
- 由于版本号是通过文件内容的hash,故文件内容未发生变化时。URL 将不会发生变化。会复用浏览器中缓存的文件。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。