Flutter是什么
Flutter 由 Google 的工程师团队打造,用于创建高性能、跨平台的移动应用。Flutter 针对当下以及未来的移动设备进行优化,专注于 Android and iOS 低延迟的输入和高帧率。
Flutter 可以给开发者提供简单、高效的方式来构建和部署跨平台、高性能移动应用;给用户提供漂亮、快速、jitter-free 的 app 体验。
Beta1版本于2018年2月27日在2018 世界移动大会公布 ;Beta2版本2018年3月6日发布;1.0版本于2018年12月5日(北京时间)发布 .
Flutter 的主要组件:
-
一个高度优化, mobile-first 2D 渲染引擎 (保护对 text 优秀的支持 )
-
一个 functional-reactive 框架 (可选的,你也可以引入你自己的框架)
-
一组 Material Design 部件 (可选的,你也可以引入你自己的部件)库 ,工具,和一个用于 Atom 的插件。
-
Flutter的开发语言是Dart
一个开源的 Flutter 应用实例:FlutterOSC
RN(React Native)是什么
React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架 React 在原生移动应用平台的衍生产物,支持iOS和安卓两大平台。RN使用Javascript语言,类似于HTML的JSX,以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。-
原生的iOS组件
-
异步执行
-
触摸处理
-
React Native的开发语言是React
移动端跨平台开发技术演进
现在主流的移动开发平台是Android和iOS,之前还有过windows phone,每个平台的开发技术都不太一样。大家都是针对每个平台开发应用。自然有人就会觉得这样效率低下,想进行跨平台开发。从最开始的Hybrid混合开发技术,到RN的桥接技术,到现在新兴的Flutter技术,跨平台开发技术一直在演进。
以往最早的Hybrid开发,主要依赖于WebView。但是WebView是一个很重的控件,很容易产生内存问题,而且复杂的UI在WebView上显示的性能不好。react-native技术抛开了WebView,利用JavaScriptCore来做桥接,将js调用转为native调用,只牺牲了小部分性能获取的跨平台开发,这是一大进步。所以现在react-native很流行的原因。
上图react-native框架原理
Flutter实现跨平台采用了更为彻底的方案。它既没有采用WebView也没有采用JavaScriptCore,而是自己实现了一台UI框架,然后直接系统更底层渲染系统上画UI。所以它采用的开发语言不是JS,而Dart。据称Dart语言可以编译成原生代码,直接跟原生通信。
上图是Flutter框架原理图
Flutter将UI组件和渲染器从平台移动到应用程序中,这使得它们可以自定义和可扩展。Flutter唯一要求系统提供的是canvas,以便定制的UI组件可以出现在设备的屏幕上,以及访问事件(触摸,定时器等)和服务(位置、相机等)。这是Flutter可以做到跨平台而且高效的关键。另外Flutter学习了RN的UI编程方式,引入了状态机,更新UI时只更新最小改变区域。
系统的UI框架可以取代,但是系统提供的一些服务是无法取代的。Flutter在跟系统service通信方式,采用的是一种类似插件式的方式,或者有点像远程过程调用RPC方式。这种方式据说也要比RN的桥接方式高效。
Flutter与RN异同
简单总结一下Flutter与RN的异同。
- 都实现了移动开发跨平台
- 界面的编写都很类型,采用响应式视图,维护了一个状态机,只更新改变的最小区域界面
- 都支持热重载hot reload,开发调试非常方便
- 调用系统的service仍然需要封装接口,仍然还是需要懂得native开发
- RN采用JS语言开发,基于React,受众更多。Dart语言受众小
- Flutter的UI框架性能貌似更高一些,但是直接丢弃了原生UI框架。而RN还是可以自己利用原生框架,两个各有好处。Flutter的兼容性高,RN可以利用原生已有的优秀UI
- Flutter的第三方库还很少,RN发展的早,虽然也还不完善,但是比Flutter好
- RN的界面布局更像网页布局,而Flutter的布局更像native布局
- Flutter在跨平台这方面做得更彻底一些
Flutter、RN、原生对比
认知:
比较内容 | Flutter | RN | |
---|---|---|---|
平台实现 | 通过Dart虚拟机编译成机器码 | Virtual Dom映射到原生View,通过ART虚拟机编译成机器码 | |
绘制引擎 | Skia | JS V8+Skia/OpenGL ES | |
使用语言 | Dart | React | |
上手难度 | 一般 | 难 | |
框架程度 | 重 | 较重 | |
社区 | 丰富,谷歌力捧 | 活跃,FaceBook支持 | |
软件发布 | 支持热更新(暂未开放) | 支持热更新 |
2、启动时间,Flutter(冷热启动时间)>RN=原生
3、内存占用,在高端手机上,flutter占用内存是大于RN的,但是低端手机Flutter的内存占用会低于RN,RN内存占用不稳定,页面刚生成的时候内存占用会高一点, 之后缓慢回落。
4、CPU占用,RN明显高于Flutter和原生,这会导致手机性能降低、耗电量增加、发热更厉害
5、主观感受,Flutter要比RN更加流畅,体验感更好,但是和原生仍有不小差距,不过Flutter还很年轻,官方宣称其性能会接近原生,甚至超过原生体验,随着Google不断的改进相信在不远的将来会实现这个可能。