Flutter介绍 – Flutter,H5,React Native之间的对比

30次阅读

共计 1737 个字符,预计需要花费 5 分钟才能阅读完成。

Flutter 介绍
Flutter 是 Google 推出的开源移动应用开发框架。开发者可以通过开发一套代码同时运行在 iOS 和 Android 平台。
它使用 Dart 语言进行开发,并且最终编译成各个平台的 Native 代码,这样既保证了开发效率,也保证了各个平台的运行效率。其相当于从头到尾重写了一套 UI 框架,不依赖具体平台的组件。其所有的组件都是 ”Widget”。渲染引擎则依靠高效渲染库 Skia 实现。
下面我们对比一下 H5、React Native、Flutter 这些跨平台的解决方案。
移动端的跨平台技术
H5 技术
常被人提起的 H5 技术,其实就是网页 +JavaScript。比如目前的一些流行的 JS 框架 Vue,React,AngularJS 等都是为了构建网页。针对移动端构建出来的网页可以实现在跨平台的功能,但是其缺点也很明显:

渲染效率低下,用户体验差。很多 H5 在 iOS 平台表现尚可,但是在 Android 上特别是一些低端机上的表现确实让人不敢恭维。
网页调用设备硬件相关 API 比较困难,而且支持的功能较少,实现此类需求是 H5 的短板。

React Native
React Native(RN)发布于 2015 年,也是使用 JavaScript 语言进行跨平台 APP 的开发。与 H5 开发不同的是,它使用 JS 桥接技术在运行时编译成各个平台的 Native 代码,其使用的技术 Facebook 的 Flux 技术。其优点是目前的生态比较成熟,目前也有很多跨平台应用使用 React Native。它也是跟 Flutter 对比的主要对象。其特点是:

使用 JavaScript 语言,由于 JS 被广泛地使用,所以 RN 也很容易被接受。
RN 依赖 JS 的运行时环境,也就是 JS 桥接技术。其使用 Facebook 的 Flux 架构。
RN 仅提供了 UI 渲染和设备访问的 API,很多功能必须依赖第三方库来实现对本地组件的使用。
生态目前比较完善,使用的公司也比较多,特别是对 JS 比较熟悉的同学容易上手。
支持热部署,开发过程中可以节约很多时间。

但是它也并不是完美的:

它的渲染方式还是调用各个平台的原生控件,有时需要针对不同的平台做不同的优化。
其性能相对于 H5 有很大的提高,但是并没有完美解决,白屏,丢帧问题依然存在。

Flutter
Flutter 也看到了目前的跨平台解决方案并不完美,所以它借鉴了 React Native 的一些思想,做出了很大的优化。它将代码编译成原生代码,并且直接在各个平台中使用其高效渲染引擎 Skia 进行渲染,没有桥接,不调用平台相关控件。
这种设计思想完美解决了不同平台的性能问题。
归功于其设计思想,我们可以真正实现一套代码,运行不同的平台。在其推出之后,关注的开发者数量和相关的教程的增长速度远超当时的 React Native。
其特点包括:

使用 Google 自主开发的 Dart 语言。Dart 语言是一个强类型的语言,很好地支持面向对象,并且易于学习和使用。
使用谷歌自己的 Skia 渲染引擎,Android 自带 Skia 引擎,iOS 平台上 Flutter 也会把 Skia 引擎打包到 APP 中,实现高效渲染。
目前有非常丰富的视图组件,可以点击这里查看其组件目录,包括 Android 上常用的材料设计(Material Design)的 UI 风格,和 iOS 风格(Cupertino)。由于其渲染不依赖各平台相关组件,所以运行在不同平台上的效果是一致的。
同样支持热部署,开发时可以像网页开发一样实时看到效果。

目前它存在的一些问题是:

国内学习资源目前并不丰富,使用 Flutter 的公司也比较少。
相关的生态还没有 React Native 那样丰富,但是其发展速度大大超过了 React Native。

总结
虽然 Flutter 目前并不是非常流行,但是笔者相信它是跨平台解决方案的未来。如果谷歌的新系统 Fuchsia OS 能像当今的 Android 这样如日中天,甚至替代掉 Android 的话,Flutter 的发展也会迎来它的顶峰。
本系列博客我们就来深入学习和探讨使用 Flutter。
后面的文章我们会逐步深入学习 Flutter 的功能与实战。我的博客中关于 Flutter 的所有文章可以点击这里找到,欢迎关注!
如果有问题可以留言,或者给我发邮件 lloyd@examplecode.cn,期待我们共同学习与成长!

正文完
 0