React Native
在 React 框架中,JSX 源码通过 React 框架最终渲染到了浏览器的真实 DOM 中,而在 React Native 框架中,JSX 源码通过 React Native 框架编译后,与Native原生的UI组件进行映射,用原生代替DOM元素来渲染,在UI渲染上非常接近Native App。
优点:
- 相比Xcode中原生代码需要较长时间的编译,React Native 采用热加载的即时编译方式
- React Native 可以通过 JSBundle 即时更新 App。相比原来冗长的审核和上传过程,发布和测试新功能的效率大幅提高。
- React Native摆脱了WebView的交互和性能问题,同时可以直接套用网页开发中的css布局机制。脱了 autolayout 和 frame 布局中繁琐的数学计算,更加直接简便。
缺点:
- 目前的React Native 官方文档中可以发现仍有部分组件和API都区分了Android 和 IOS 版本,即便是共享组件,也会有平台独享的函数。也就是说仍不能真正实现严格意义上的“一套代码,多平台使用”。
- 动画性能差:React Native 在动画效率和性能的支持还存在一些问题,性能上不如原生Api。
kotlin Multiplatform
Netflix就是使用kotlin Multiplatform来编写的平台中立性业务逻辑,并通过Kotlin/Native将其编译为分别面向Android的Kotlin库和面向ios的原生通用框架。
Flutter
flutter基于Dart语言(个人感觉很不好用...)
缺点:
- flutter基本上是Android优先的开发环境,从底层开始就依赖Android的Material Design。如果ios的flutter出现错误,只能等待谷歌修复。
- flutter的Skia渲染引擎可以让应用模仿原生的外观和体验,但并不会使用原生按钮、切换、滚动条、表视图或者其他界面和导航元素。
- 此外,flutter的相关文档很少,我在学习的过程中,即使是按照官方文档敲写demo,也遇到了很多bug,只能慢慢的调试找问题所在。也就是说,如果要精通dart及flutter,成本是很高的。
SwiftUI
目前苹果也在推进自己的下一代声明开发技术:SwiftUI。虽不能支持Android应用,但恶意一次性支持所有苹果平台:iOS、iPadOS、macOS、watchOS和tvOS。