React Native热更新原理概述
什么是热更新
相对应冷更新(应用市场整体更新包),实时的更新与部署应用;所谓热更新就是在不重新安装的前提下进行代码和资源的更新。
热更新有什么好处
加快APP开发的迭代速度;让APP的开发跟传统web开发一样秒上线;方便一些活动的管理与bug的调试等。
那坏处呢?政策风险
动态改变应用的运行时代码在谷歌和苹果官方看来是一种危险的行为,因为开发者可能通过这一个特性规避某些审核特性,来骗取审核。从用户的角度来说,APP私自改变功能,用户也可能是不知情并且不可控制的,也有安全风险。
在iOS的体系中,Apple是明文禁止热更新的,除了以下两种情况:
- 应用为游戏,且通过官方允许
- 基于WebView(WebKit内核)实现的功能,可以通过更新js脚本来热更新
React Native 现在是否还属于第二种情况,还经不太明确。
当前主流的热更新解决方案
在动态更新方面React Native只是提供了动态更新的基础,对将应用部署到哪里,如何进行动态更新并没有支持的那么完善。好在微软开发了CodePush,填补React Native 应用在动态更新方面的空白。CodePush 是微软提供的一套用于热更新 React Native 和 Cordova 应用的服务;另外还有国人版RN中文网推出的pushy是一套用于 React Native 热更新的组件,服务器不同,速度也不同,并且有代码泄露风险。
微软项目地址:https://github.com/Microsoft/react-native-code-push
中文网项目地址:https://github.com/reactnativecn/react-native-pushy
自己搭建热更新服务器
国人写的开源的CodePushServer项目:https://github.com/lisong/code-push-server
基于微软CodePush项目,适配code-push-cli和react-native-code-push 搭建自己的 React Native 热更新服务,或者自己搭建简单的文件服务器。
热更新的基本原理
React Native 是使用脚本语言来编写的,所谓脚本语言就是不需要编译就可以运行的语言,也就是“即读即运行”。我们在“读”之前将之替换成新版本的脚本,运行时执行的便是新的逻辑,稍微抽象一下,图片资源是不是也是“即读即运行”?所以脚本本质上和图片资源一样,都是可以进行热更新的。
React Native 中 js代码最终会打包成一个jsbundle文件,我们只需要更新的时候,在APP中从远程服务器上下载这个文件,并重新加载,就可以完成动态更新无需重新发布应用市场。bundle里存放了RN源码、第三方库代码和业务逻辑代码,其中频繁更新的就只有业务逻辑代码,所以我们将RN源码和第三方库代码打包成一个bundle,业务逻辑打包成一个bundle,热更新的时候就只更新业务逻辑的bundle即可。可以实现增量更新的!
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/25/overview-of-react-native-hot-update-principles/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论