为什么我要选Flutter之移动端跨平台方案对比
为什么我要选Flutter之移动端跨平台方案对比
web容器方案:
- 优点:
- 效率高:H5代码只需要开发一次,就能同时在多个系统运行,因此大大降低了开发成本;
- 生态相当成熟:Web开发技术,社区和资源非常丰富,开发效率也很高;
- 动态化:支持。
- 缺点:
- 性能差:一个完整HTML5页面的展示要经历浏览器控件的加载、解析和渲染三大过程,性能消耗要比原生开发增加N个数量,一边加载,一边解析,一边渲染体验较差。
泛Web容器方案(Reactive Native或Weex):
- 优点:
- 性能较好:采用原生自带的UI组件实现代替了核心的渲染引擎;
- 效率中等:一套代码两处使用,简单需求开发高效,特定交互或者复杂需求等仍需要对两个原生平台控件进行拓展时效率较低;
- 生态较为成熟:经过数年发展,有不少成熟的第三方库+工具类
动态化:支持。
- 缺点:
- 兼容性较差:与原生控件桥接无法做到两个平台无缝接管,对于特定交互或者复杂需求等仍需要对原生控件进行拓展,效率无法保持高效;
- 学习难度大:负责业务需求开发对于开发要求需学会前端开发+Android+iOS原生。
自绘引擎开发方案(Flutter)
- 优点:
- 效率高:Dart语言开发App,一套代码可以同时运行在 iOS 和 Android平台(无须转化iOS Android原生控件,兼容性较高,基本无须单独适配),Dart支持JIT(即时编译),在开发期使用JIT,开发周期异常短,调试方式颠覆常规(支持有状态的热重载);
- 性能好:Flutter是重写了一整套包括底层渲染逻辑和上层开发语言的完整解决方案。这样不仅可以保证视图渲染在Android和iOS上的高度一致性(即高保真),在代码执行效率和渲染性能上也可以媲美原生App的体验(即高性能);
a. 底层图像交由渲染引擎Skia处理,Skia是一款用C++开发的、性能彪悍的2D图像绘制引擎,其前身用于向量绘图,确保高性能高保真
b. 应用发布使用AOT(事前编译),本地代码的执行更高效,代码性能和用户体验也更卓越;
c. Dart避免了抢占式调度和共享内存,可以在没有锁的情况下进行对象分配和垃圾回收,在内存性能方面表现相当不错。
- 缺点:
- 生态:尚不成熟,然而通过社区生态较为活跃,发展相当明显;
- 动态化:不支持 。