人类的本质是复读机,编码的本质是重复造轮子
在移动端hybird开发过程中,为避免必须联网和每次启动都重新从远端请求web资源等问题,会把资源一并打包到本地;但是每次修复和更新,漫长发布审核过程让人痛不欲生。如何快速更新修复这个严肃的问题,是必须要面对的。
但是呢,面对归面对,解决的办法已经很熟了。
就拿cordova为代表的webview入口地址为本地的混合开发来说,很久很久以前,有个叫达拉崩吧斑得贝迪卜多比鲁翁的勇士,啊呸,有个叫 cordova-hot-code-push-plugin 的插件,就给提供了热更新这个功能。即便它已经没有人维护。
首先从文档和使用入手;
How to use
cordova-hcp
Where can be:
- init - initialize project parameters, create default cordova-hcp.json file.
- build - build project files, generate chcp.json and chcp.manifest files in the www folder. Prepare for deployment.
- server - run local server that is used for local development process.
- login - create login credentials that are used for deployment of project files on the remote server.
- deploy - upload project files on the remote server.
文档上描述工具在如何使用并且发布到服务器都一并提供了,但是不同的都有不同的部署方式,可用可不用,依据个人情况。
只需要关注到更新的资源部署之前,Prepare for deployment。
cordova-hcp build
where:
- [www_directory] - path to the directory with your web project. If not specified - www is used.
Command is used to prepare project for deployment and to generate plugin specific configuration files inside www folder:
- chcp.json - holds release related information.
- chcp.manifest - holds information about web project files: their names (relative paths) and hashes.
这个操作若无制定文件夹,默认在www文件,也就是cordova的web资源文件夹下生成 json & manifest 文件。
chap.json :描述了发布的内容的release 和version等操作的相关信息
{ "autogenerated": true, "release": "2020.03.04-19.05.00", "content_url": "https://download_path", "update": "now"}
chcp.manifest :描述的是文件的路径和当前的hash
将这两个文件更新到服务器。
在cordova config.xml 增加配置项。
完成配置即可在App启动时候检查更新并且下载更新。
从上述配置的地址梳理流程,app启动 => chcp 对比 config.xml 配置地址的文件和本地文件 => 有更新则访问 json 配置的 url 将资源下载,同时更新本地 json => 启动时、直接或其它时机更新资源
这样就达到了web资源热更新。
插件的使用是实现具体就不多讨论了,铺垫了这么多只有最后这一小段是最有用,再给它浓缩一下,热更新的过程可以概括为:
- 检查更新
- 下载资源
- 更新时机
(好学的张三同学: 等等!um... 这个过程挺眼熟啊,是不是哪儿见过?)
其实这个过程也可以说是资源缓存的过程,协商永久缓存资源。说到缓存就想到浏览器http缓存,似乎也挺适用。暂不做展开。
说起来挺简单的思想,知道了拼了命都得找个地方用用才行,上完课当然得做练习啦。还就着这个cordova项目来说,web资源是更新了,那么原生资源需要更新的时候呢?是不是就可以自定义更新检查,下载原生包到本地,选择时机更新;由于App更新权限的问题,iOS下更新App也不一致,具体实现有偏差,chcp也提供检查app版本的回调。
或者在其它客户端(nw/electron,pos机)也可将流程思想应用。只要有端,那就有缓存和更新
。
归纳总结,原来站在巨人肩膀上。