weex更新方案探索(一)
来源:互联网 发布:淘宝企业店铺开店 编辑:程序博客网 时间:2024/05/20 00:36
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文件跳转);
(未完,持续更新中…)
阅读全文
0 0
- weex更新方案探索(一)
- weex更新方案探索(三)
- weex更新方案探索(四)
- weex更新方案探索(五)
- weex更新方案探索(六)
- weex更新方案探索(七)
- weex更新方案探索(二)
- Weex环境构建(一)Weex+Android开发环境
- weex采坑之旅(一)初识weex
- weex项目实战篇(一)
- weex项目实战篇(一)
- weex 踩坑记(持续更新中……)
- weex 在线js文件下载(更新)机制分析
- android app热更新方案探讨(一)
- 腾讯开源手游热更新方案Xlua尝鲜(一)
- iOSweex集成入门,weex快速上手教程,weex集成到iOS工程注意事项(一)
- Weex系列一、构建Weex工程
- Weex渲染机制(一)
- C# 利用委托实现窗体间传值
- 100%移植阿里云移动测试技术,竟仅需1周?! ——移动测试专有云(1)
- Java笔记杨枝11.4/11.5
- spring学习之@ModelAttribute运用详解
- dataTable显示序号
- weex更新方案探索(一)
- Mangos源码分析(9):服务器公共组件实现之环形缓冲区
- 通过静态代码块读取配置文件配置静态属性
- object_detection“使用教程”翻译(三):defining_your_own_model.md
- 大数据1问题??????
- iframe
- Scrapy爬虫入门系列3 将抓取到的数据存入数据库与验证数据有效性
- windows+Ubuntu 双系统的引导修复问题
- cpu架构(1)——risc