Flutter技术调研

一、Flutter简介

Flutter是谷歌的高性能、跨端UI框架,可以通过一套代码,支持iOS、Android、Windows、MAC、Linux等多个平台,且能达到原生性能。它采用的开发语言是Dart,Dart也是谷歌开发的计算机编程语言,语法类似C,是编译型语言。

二、性能

2.1 性能测试案例

测试用例1 — List view benchmarking

这里使用原生、rn、flutter 在android和iOS上实现了相同的1000个项目的列表图,并且以相同的时间滚动到最后一个元素。

Android测试结果数据对比
在这里插入图片描述
检测结果:
1、所有测试均显示出大致相同的FPS。
2、与Android 原生相比,Flutter使用的内存多了近一半,但比RN使用内存少。
3、RN 需要较重的 CPU 利用,原因是在于JS 和原生之间通信需要使用 JSBridge,这会在序列化和反序列化方面浪费资源。相比越来,没有桥接的Flutter就非常占优势。
4、电池利用方面,Flutter优于RN,劣于Android 原生。

ios测试结果数据对比
在这里插入图片描述
检测结果:
1、在 FPS上flutter表现与原生大致相同,React Native 的结果比 Flutter 差,原因是无法在 iOS 上使用 IoT 编译。
2、在内存上 Flutter 与原生的内存消耗几乎相同。
3、Flutter 在 CPU 上消耗较重,但相比起同类型的框架 React Native 却优先很多。
3、Flutter 在 GPU 的消耗上甚至少于原生。

测试用例2 — Heavy animations test

该测试用力在 Android,iOS,React Native 上使用了 Lottie 进行复杂矢量动画的展示,并在 Flutter 上使用了 Flare 实现相同的动画。

Android测试结果数据对比
在这里插入图片描述
检测结果:
1、Flutter的结果有点糟(12%的CPU和9 FPS),Android 和 React Native 在性能表现上差不多,这是因为该场景下 Lottie for React Native 只需要使用的原生的绘制逻辑(16–19%CPU,30–29 FPS)。
2、从上述网格动画中删除一个特定的动画后,居然会使 Flutter 上的 FPS 最高提高 40%,这里猜测可能是 Flutter 本身对这种绘制存在兼容问题的原因。
3、Android 原生需要的内存最少(205 Mb),其次是Flutter 需要266 Mb,React Native则需要 280 Mb。
4、应用程序冷启动后,Flutter处于领先地位(2秒),对于 Android 原生和 React Native 大约需要4秒钟。

IOS测试结果数据对比
在这里插入图片描述
检测结果:
1、Flutter表现结果糟糕(cpu 123、fps 8)。
2、Flutter需要的内存量是117 Mb,次于 IOS 原生的48 Mb ,优于 React Native 的135 Mb。
3、应用程序冷启动后,Flutter处于领先地位(2秒),对于 iOS 原生和 React Native 大约需要 10秒。
注意:这里给 Flutter 使用了一个不同的库,该库比在其他平台上使用的库重得多,这可能是fps下降的原因。

测试用例3 - Even heavier animations test with rotations, scaling and fade

在此测试中,我们对 200 张图像进行动画运行(旋转和淡入淡出),从而对比不同平台的性能。

Android测试结果数据对比
在这里插入图片描述
检测结果:
1、原生平台显示出最佳性能和最有效的内存管理;
2、相比起其它框架,Flutter的FPS更接近于原生,但是内存开销增加了一倍倍;
3、Flutter表现明显优于React Native。

IOS测试结果数据对比
在这里插入图片描述
检测结果:
1、所有测试均显示出大致相同的FPS。
2、Flutter主要使用GPU渲染,RN使用CPU渲染。
3、在内存的使用上,原生最少,其次Flutter,然后是RN。

2.2 Flutter高性能原因

从上面的对比可以看出,Flutter使用GPU渲染,在需要CPU繁重的操作中,使用Flutter更为适合,不管是从CUP还是内存的角度来看。
Flutter开发app性能最接近原生的原因有以下几点:

① 没有桥接层

与React Native、Weex等跨终端框架技术相比,Dart可以被编译成不同平台的本地代码,让Flutter不通过桥接层直接跟平台通信,自然性能会快一些。

② 编译执行

Dart是编译执行的,与JavaScript解释执行相比,性能更优。

③ Flutter Engine虚拟机

Dart是编译执行的,与JavaScript解释执行相比,性能更优。
Flutter是依靠Flutter Engine虚拟机在iOS和Android上运行的,Flutter Engine使用C/C++编写,开发人员通过Flutter框架直接和API在内部进行交互,所以具有输入低延迟和UI渲染高帧速率的特点。

除此之外,Flutter还提供了自己的小部件用为构建UI。窗口小部件根据其当前配置和状态描述了它们的视图。 当窗口小部件的状态发生更改时,窗口小部件会重建其描述,框架将根据前面的描述进行区分,以确定底层呈现从一个状态转换到下一个状态所需的最小更改。可以直接在OS平台提供的画布上进行描绘,也就是一些核心类库直接放到虚拟机里面,调用起来更快。从它的系统结构可以看出,类似安卓的ART(Android Run Time)虚拟机,同样采用AOT(Ahead of TIme)技术,会在APP安装时就编译成机器语言,不再解释执行,从而优化了APP运行的性能。

④ 自带渲染引擎

Flutter使用谷歌自己的Skia渲染引擎,而Android系统自带Skia引擎,iOS平台上Flutter也会把Skia引擎打包到APP中,从而实现了高效渲染。

三、Flutter的优缺点

3.1 优势

  • 一套代码,多端运行,可以节省开发资源、测试资源。
  • 性能强大,流畅,使用Skia作为其2D渲染引擎,既不使用WebView,也不使用操作系统的原生控件,这样不仅可以保证在Android和iOS上UI的一致性,而且也可以避免对原生控件依赖而带来的限制及高昂的维护成本。
  • 开发效率高,Flutter的热重载可以快速地进行测试、构建UI、添加功能并更快地修复错误。
  • 从底层C++到高层Dart,可扩展性高。
  • 基于 Widget 的渲染框架设计,使得 Flutter 应用能够开发出非常漂亮的 UI 界面和提供优秀的用户体验。
  • 整体开发环境要求不高,轻量编辑器+模拟器即可完成开发,已支持IDE:Android Studio和VSCode
  • 支持插件,可以访问原生系统的调。

3.2 缺点

  • 新语言 Dart 和新框架的学习成本。语言以及框架都是全新的,整个技术栈的积累需要从头开始。
  • 不支持热更新,要手动热更新。
  • 编译后的包体积较大。
  • 成熟的第三方库比较少,需要开发人员更多的掌握开发细节技巧和优化技术,需要自己造轮子。
  • 国内企业用户不多,虽然 Flutter 在开发社区中获得了巨大的影响力,但它仍然相对较新,与更成熟的框架相比,目前总体采用的还不够多。
  • Flutter 相较于其它跨端技术,在渲染效率和多端适配度上有非常大的优势,但其无法实现动态化更新,使得 Flutter 的发版成本较高。
  • 目前国内应用的人群相对较少,有时候遇到问题在社区里找不到解决方案。
  • 开发体验不太好,跨端调试工具不完善,调试时间会更长。

四、Flutter社区及生态

Flutter 的生态系统相对较小,这是因为 Flutter 是一个较新的框架,相对于 React Native 或 Ionic 等其他框架而言,Flutter 的开发者数量和用户群体较少,其社区和生态系统相对薄弱。

4.1 市场活跃度

下图是权威的 Statista 的统计,可以看出从2019年到2021年,Flutter在市场上的占有份额持持续增长状态。
在这里插入图片描述
另外,基于各大程序员交友网站的统计,Flutter 在国外的流行度似乎更胜一筹,下面是数据:

移动开发技术调研分析可以从以下几个方面进行: 1. 平台选择:移动开发可以涉及到多种平台,如iOS、Android、Windows等。分析不同平台的市场份额、用户群体、开发工具和生态系统,以确定最适合目标用户群体和项目需求的平台。 2. 开发语言和框架:移动应用的开发语言和框架选择影响着开发效率和应用性能。调研各种语言和框架的特点、优势和劣势,如Java、Swift、Kotlin、React Native、Flutter等,以确定最合适的技术栈。 3. UI/UX设计:移动应用的用户界面和用户体验设计对于应用的成功至关重要。调研不同的设计原则、流行的设计趋势和工具,如Material Design、Human Interface Guidelines等,以确保应用具有吸引力和易用性。 4. 设备兼容性:移动设备的种类繁多,屏幕大小、分辨率、处理能力等差异较大。调研不同设备的特点和限制,并了解响应式设计和自适应布局等技术手段,以确保应用在不同设备上能够正常运行和展示。 5. 性能优化:移动应用的性能对用户体验至关重要。调研各种性能优化技术,如应用程序缓存、图片压缩、延迟加载等,以确保应用具有良好的响应速度和流畅度。 6. 安全性:移动应用涉及到用户的个人信息和敏感数据,安全性是一项重要的考虑因素。调研移动应用的安全漏洞和攻击手段,并了解安全编码实践和数据加密等技术,以确保应用的安全性。 通过对以上几个方面的调研分析,可以帮助选择合适的移动开发技术,并确保开发出高质量和成功的移动应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值