您的位置:首页 > 其它

weex更新方案探索(一)

2017-11-09 16:06 288 查看
created by zhenggl

在项目开发过程中发现:

由于网络的波动不稳定,有时weex在线js加载显示会比较慢甚至加载超时;

而资源在安装包内的本地js的方式,每次有B端页面的改动都需要重新打包,也是比较繁琐的。

为了解决上述实际开发中遇到的问题,及减轻服务器端的压力,进行了weex更新方案的探索,现总结归档成系列文章:

1. weex更新方案探索(一)【weex更新方案整体思路】【本篇】

2. weex更新方案探索(二)【weex更新方案vue端实现】

3. weex更新方案探索(三)【weex更新方案IOS端实现】

4. weex更新方案探索(四)【weex更新方案Android端实现】

5. weex更新方案探索(五)【weex更新方案服务器端实现】

6. weex更新方案探索(六)【创建工具构建版本配置文件】

7. weex更新方案探索(七)【遗留问题或后续工作】

weex更新方案探索(一)——weex更新方案整体思路

目标:

1、根据版本配置json文件,管理weex js代码的版本更新(版本更新,下次启动即可进行更新);
2、支持两种更新方式:
zip解压包下载、解压、更新;
逐个文件下载、更新;
3、大版本更新,弹框告知强制更新;
小版本更新,静默下载更新(适用于修复bug);
4、更新失败 或 更新不全的,下次启动继续重新执行更新;
更新不全的,按缓存中配置表中配置方式进行页面加载
(如果本地的,如已下载保存,则是最新的;在线的,则是最新的);
5、每次启动都进行版本升级检测或升级;


思路:

1、json配置数据接口,提供最新配置数据;
2、根据C端配置数据缓存,与服务端数据比对分析,
获取需更新的文件,进行下载、更新;维护C端配置数据缓存;
3、所有页面跳转均基于C端配置表,使用在线的则直接跳转在线页面;
使用本地的则进行防篡改判断,通过则跳转本地页面,不通过则跳转在线页面;


设计方案:

1. 启动页面使用在线js,集成版本升级检测模块;

2. 应用启动后,进入启动页面,调用获取json配置接口:
a、对于接口异常或数据异常,直接绕开检查更新,按缓存中配置表里的方式进行(在线/本地);
缓存不存在,使用在线;执行原有的业务;
b、对于接口响应和数据正常,拿到配置文件json数据,执行步骤3;

3. 根据app缓存、服务器返回的json数据,进行版本比对分析
(版本规则:1.0,.前面的是大版本,.后面的是小版本)
a、服务器返回的json数据有zip信息且downloadUrl不为空,
则与app缓存中数据进行比对,判断是否使用zip数据更新;
b、对于zip数据更新,获取文件名、下载地址,执行步骤4;
c、对于非zip数据更新,则比对app缓存数据,获取需要更新的文件名、下载地址,执行步骤4;
d、无更新的:使用缓存中原有的配置方式,执行原有的业务;
e、无缓存的,使用服务器返回的json数据全量更新,获取文件名、下载地址、执行步骤4;
f、在b、c、e中,对于大版本更新的,弹框显示强制更新;
g、在b、c、e中,对于小版本更新的,静默下载更新;

4. 更新处理:
a、根据缓存主版本号和服务器返回的json数据主版本号比对 及
是否有下载文件,有且有版本变更,继续后续操作;
b、下载文件(对于单个zip的需进行解压操作);
c、对于使用zip数据更新,根据服务器返回的json数据,
更新app缓存中每个文件的本地文件路径和主版本号;
更新app缓存主版本号;

5. 每个页面跳转,根据文件名查找缓存中的配置表,
获取该文件在配置表中的数据,进行分析处理(本地文件防篡改机制):
a、对于使用在线文件的方式,则直接使用在线地址,跳转页面;
b、对于使用本地文件的方式,则根据本地文件路径判断本地是否有该文件,
无则使用在线方式,如a处理;
一致则跳转本地页面;
不一致则采用在线方式,如a处理;


设计升级配置json结构如下:

{
"version": "1.0",
"list": [
{
"fileName": "history_order.js",
"version": "1.0",
"downloadUrl": "dist/business/history_order.js",
"localUrl": "",
"onlineUrl": "http://www.xxxx.com/xxx/dist/business/history_order.js",
"isUseOnline": "false",
"fileMD5": "789A7E960D581C79BAD891B8BC12B30C"
},
...
],
"zip": {
"fileName": "dist.zip",
"version": "1.0",
"downloadUrl": "dist.zip",
"localUrl": "",
"fileMD5": "DB664CD6FF92D6F01A67D7E6BAAA77D2"
}
}


//字段说明:
{
//主版本号,用于比对大版本还是小版本升级
"version": "1.0",
//所有文件列表
"list": [
{
//文件名,唯一
"fileName": "history_order.js",
//本文件的版本号(主版本号变更,此文件版本号无变更,且下载地址无变更,则不会下载更新该文件)
"version": "1.0",
//本文件的下载地址,相对路径
"downloadUrl": "dist/business/history_order.js",
//本文件在app本地的路径(app端下载本文件后填充)
"localUrl": "",
//本文件的在线路径(对于isUseOnline=true、
//   fileMD5不一致、下载更新后localUrl仍为空的,采用在线js文件)
"onlineUrl": "http://www.xxxx.com/xxx/dist/business/history_order.js",
//是否使用在线js文件
"isUseOnline": "false",
//本文件的MD5值,用于下载到app中,防止app中被篡改了
"fileMD5": "789A7E960D581C79BAD891B8BC12B30C"
},
...
],
//升级文件压缩包的配置信息
"zip": {
//压缩包文件名称
"fileName": "dist.zip",
//压缩包的版本号,要跟主版本号一致
"version": "1.0",
//压缩包下载地址(相对路径),若该地址为空,
//   则采用list中的数据,逐个比对更新了的文件,进行下载更新;
//   若该地址不为空,则采用zip的方式,下载zip并解压覆盖,达到更新目的;
//  【注意:对于未获取过全量的,zip里的文件要全量;已获取过全量的,可以是增量】
"downloadUrl": "dist.zip",
//本文件在app本地的路径(app端下载本文件后填充)
"localUrl": "",
//本文件的MD5值,用于下载到app中,防止app中被篡改了
"fileMD5": "DB664CD6FF92D6F01A67D7E6BAAA77D2"
}
}


C端需提供的能力:

1、文件下载(单个、批量)及 进度;
2、zip解压;
3、文件操作;
4、文件MD5;
5、全局缓存(获取、保存);
6、页面跳转改造(防篡改机制、兼容支持打开本地/在线js文件跳转);


(未完,持续更新中…)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  weex weex更新