H5+原生(Hybrid)
将APP的一部分需要动态变动的内容通过H5来实现
通过原生的网页加载控件WebView (Android)或WKWebView(ios)来加载
依赖Webview(浏览器内核)
JavaScript与原生API之间通信的桥梁
负责JavaScript与原生之间传递调用消息
必须遵守一个标准的协议,它规定了消息的格式与含义
WebView JavaScript Bridge
依赖于WebView的用于在JavaScript与原生之间通信并实现了某种消息传输协议的工具
混合开发框架的核心
H5部分可以随时改变而不用发版,解决了动态化的需求
优缺点
优点:动态内容是H5,使用web技术栈就可以开发,社区及资源丰富
缺点:性能不好,对于复杂用户界面或动画,webview不堪重任
自绘UI+原生
代表
Flutter
Dart语言
Flutter提供了丰富的组件、接口
Flutter使用Skia作为其2D渲染引擎
Android系统已经内置了Skia
iOS系统并未内置Skia,构建iPA时,也必须将Skia一起打包
缺点:不支持动态下发代码和热更新
实现一个统一接口的渲染引擎来绘制UI,而不依赖系统原生控件,所以可以做到不同平台UI的一致性
涉及其它系统能力调用,依然要涉及原生开发
优缺点
优点
性能高;由于自绘引擎是直接调用系统API来绘制UI,所以性能和原生控件接近
灵活、组件库易维护、UI外观保真度和一致性高
由于UI渲染不依赖原生控件,也就不需要根据不同平台的控件单独维护一套组件库,所以代码容易维护
由于组件库是同一套代码、同一个渲染引擎,所以在不同平台,组件显示外观可以做到高保真和高一致性
由于不依赖原生控件,也就不会受原生布局系统的限制,这样布局系统会非常灵活
缺点
动态性不足
为了保证UI绘制性能,自绘UI系统一般都会采用AOT模式编译其发布包,所以应用发布后,不能像Hybrid和RN那些使用JavaScript(JIT)作为开发语言的框架那样动态下发代码
PWA
本质上是 Web App,看起来更像一个原生App
借助一些新技术也具备了 Native App 的一些特性,比如离线能力、本地缓存、和通知推送,兼具 Web App 和 Native App 的优
PWA完全使用前端技术栈,不过它需要手机和浏览器的支持,目前支持ServiceWorker和Google Play Service的Android手机,以及搭载11.3以上的iOS手机可以使用PWA