前台文件版本管理

     现在的网站基本都会使用大量的js, 为了方便开发管理, 会用到各种的库和模块, 为了可以平滑的的对网站进行升级, 需要有个机制来保证。

     所以版本管理, 就是需要实现个机制, 可以在对网站进行升级,回退。设计良好的版本管理,就跟 svn 一样,可以在各个版本间自由切换。

     版本管理和系统优化配合在一起收到很好的优化效果。

     最容易利用的优化是浏览器的cache,给我们的文件资源添加上很长的cache 时间, 这样资源再次被请求的时候就会带上cache 的时间,根据浏览器的策略可以发起网络请求,然后收到服务器的304应答, 或者是直接不发起请求, 在用http watch 可以抓包到对于的cache 请求( Fiddler 是抓包不到cache 请求的) , 从而达到加快网站的加载。

     在我做过的一个项目里方案是这样的, 对需要更新的文件生成新的文件,以新版本号命名。然后用一个版本号文件列表这些文件, 脚本发现这个新的版本号文件, 把对应的文件的版本更新到全量的版本文件中, 也就是增量更新文件的版本好。  这样做的原因有几个:

  • 采用生成新文件的方式好处是可以利用浏览器的cache,又可以很方便的更新文件, 可以给资源添加长cache, 资源请求回来就cache 了,网站更新的时候, 这个文件有个新的版本号, 也就是重新拉去新的版本文件,拉取回来后又可以cache 了。
  • 用增量的方式更新文件可以只关心需要修改的文件, 而不用担心误其他文件的版本号问题。
      在以后的项目过程中发现一些问题, 比如系统中只有一个全量版本存在,不能做到多个版本并存的灰度放量。在版本回滚上由于没有做原旧全量版本文件的备份, 在版本回滚上还是人工发布原来的版本文件进行回滚。
     可以看到问题还是出在全量版本文件的处理上, 如果可以做到这个文件的版本控制, 那就可以自由的切换了。 所以就有了后面的优化方案,用工具生成新的版本文件列表, 也就是每次网站更新都生成一个全量文件的描述文件。 之后的事情就简单了, 最爽的就是通过管理端来切换全量版本文件的描述文件来达到切换网站版本的目的。 由于系统保留了各个网站版本的描述文件, 网站版本直接的切换也就很简单了, 当然包括当前版本发布的回滚了。
 版本发布
     现在很多团队做了更多值得借鉴的优化,利用localstorage 就是一个很好的方式: 把请求到的文件存到localstorage里, 下次请求这个文件的时候去localstorage里取, 假如取不到还是可以利用上面说到的cache. 减少了cache 失效以及304 的请求, 没有版本更新的时候可以做到很少的文件请求,实现web服务的快速启动。
     还有做的更极致的: 还是利用localstorage 存储文件,在文件发布时只生成变更的代码, 把变更”patch” 到原文件中得到新的文件,从而达到版本更新的目的。
这样的好处是每次版本更新只请求变更的部分, 毕竟每个版本需要修改的部分不会太多, 大大的减少了网络请求。 版本的回滚可以使用逆版本更新的方式:从新文件“patch” 回老版本文件。 更多的详情大家请参考 https://github.com/mtjs/mt

Tags:

发表评论

电子邮件地址不会被公开。 必填项已用*标注