Flutter 调研

背景

当前我们公司客户端开发,包含三种常用技术,iOS native、Android native、React-Native,在长时间的使用中发现,React-Native的 UI 统一性不够,深度开发严重依赖native,性能需要做大量的优化工作,所以考察 Flutter 当做备选替换方案。

Flutter 是什么

Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。 Flutter提供了丰富的组件、接口,开发者可以很快地为 Flutter添加 native扩展。同时 Flutter还使用 Native引擎渲染视图。

跨平台自绘引擎

Flutter既不使用WebView,也不使用操作系统的原生控件,而是使用Skia作为其2D渲染引擎。

Skia是Google的一个2D图形处理函数库,包含字型、坐标转换,以及点阵图都有高效能且简洁的表现,Skia是跨平台的,并提供了非常友好的API,目前Google Chrome浏览器和Android均采用Skia作为其绘图引擎。

高性能

  1. Flutter APP采用Dart语言开发。Dart在 JIT 模式下,速度与 JavaScript基本持平。但是 Dart支持 AOT,当以 AOT模式运行时,JavaScript便远远追不上了
  2. Flutter使用自己的渲染引擎来绘制UI,布局数据等由Dart语言直接控制,所以在布局过程中不需要像RN那样要在JavaScript和Native之间通信

JIT(Just In Time) 动态编译:解释执行,边翻译边执行。

AOT(Ahead Of Time)静态编译:程序在执行前全部被翻译为机器码

采用Dart语言开发

开发效率高

Flutter在开发阶段采用,采用JIT模式,这样就避免了每次改动都要进行编译,极大的节省了开发时间。

在发布时可以通过AOT静态编译生成代码,不需要解释执行,性能高。

高性能

类型安全

由于Dart是类型安全的语言,支持静态类型检测,所以可以在编译前发现一些类型的错误,并排除潜在问题

调研问题

能否绝大部分脱离原生开发

在 React-Native 深入开发的工程中我们发现,其实还是需要大量的原生开发人员配合,或者开发者本身具有原生开发经验,如果Flutter 开发需要过多的原生开发,则没有必要采用。因为在高速迭代的过程中,如果需要原生开发介入,沟通成本过高,而如果开发人员本身具有原生开发经验,则招聘成本会比较高。

Flutter 通过引入和使用Skia 渲染 UI,比 RN 的跨平台更彻底一些,但是如果涉及其它系统能力调用,依然要涉及原生开发。初步评估,还是需要不少的原生开发任务,比 React-Native 少一些,但是也不能绝大部分脱离原生开发

性能是否媲美原生

目前 React-Native 的性能基本接近原生,Flutter 是否能达到同样性能。

Flutter 使用 Skia 渲染 UI,而且代码通过静态编译生成,在执行前不需要解释,性能要比 React-Native 优秀,应该基本等同于 native 代码,而且,咸鱼团队验证过,部分场景,甚至要优于 native。性能是很完美的

开发成本

学习成本

开发语言使用 dart,dart 借鉴了不少语言的特性,有很多地方跟 JavaScript 很像,基本使用的入门门槛不高。开发的IDE 官方推荐 Android Studio 或者VS Code。学习成本与 React-Native 基本一致。

迁移成本

暂时不考虑

是否支持热更新

不支持热更新

由于 Flutter 在发布时使用的时 AOT 的模式生成机器码,与native 一样,所以不支持热更新。官方解释了不支持的几个原因。总结起来,应该是如果要实现热更新,很可能需要废除 AOT 这个模式,这就让 Flutter 跟 React-Native 差不多,性能会变慢。

配套社区是否完善

Flutter 团队近两年的更新频繁,社区也再不断壮大,基本使用应该是没有问题的,但是跟强大的前端开发社区比,还是要差一些的。

与 React-Native 对比

对比 Flutter React-Native
开发成本
社区完善
App 性能
UI 一致性

结论

Flutter 目前来看,性能是最好的,UI 的一致性好,社区也已经基本完善,但是与 React-Native 一样,深度开发还是离不开 native 开发人员。可以看成是跨平台的原生开发,如果不追求热更新,是个很好的选择。

你可能感兴趣的:(Flutter 调研)