Flutter 与 RN对比

移动端跨平台开发技术演进
现在主流的移动开发平台是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、原生对比(Android端)
     

以往的认知结果:


性能测试过程:

 分别用Flutter、RN、原生开发三个项目,只有一个列表页面,10000条数据,在三款低中高端机型中测试。

通过性能测试得出下表:


性能测试结论:

 通过测试得出的数据结果,仅能从大体上比较出三者的性能,可能在实际的项目中会有些出入。
1、包体积原生比较小,Flutter和RN不相上下(Ios系统需要引入Skia库,最终包体积Flutter会明显大于RN),由于Flutter和RN框架中需要一些C++依赖库,导致包体积比原生大了很多。
2、启动时间,Flutter(冷热启动时间)>RN=原生
3、内存占用,在高端手机上,flutter占用内存是大于RN的,但是低端手机Flutter的内存占用会低于RN,RN内存占用不稳定,页面刚生成的时候内存占用会高一点, 之后缓慢回落。
3、CPU占用,RN明显高于Flutter和原生,这会导致手机性能降低、耗电量增加、发热更厉害
4、主观感受,Flutter要比RN更加流畅,体验感更好,但是和原生仍有不小差距,不过Flutter还很年轻,官方宣称其性能会接近原生,甚至超过原生体验,随着Google不断的改进相信在不远的将来会实现这个可能。

rnflutter都是目前非常流行的移动应用开发框架。 React NativeRN)是Facebook推出的一种开源框架,它运用了Facebook自家的React框架,能够基于JavaScript创建原生的移动应用。RN的优势在于它可以使用一套代码同时在iOS和Android平台上运行,大大减少了开发者的工作量。此外,RN还提供了丰富的组件库和强大的社区支持,使开发者能够快速搭建漂亮、高效的移动应用。 相较之下,Flutter是Google推出的开源框架,它使用Dart语言进行开发。Flutter通过自定义的渲染引擎绘制UI,可以创建高性能且美观的跨平台移动应用。Flutter具有热重载功能,使开发过程更加迅速和便捷。同时,Flutter提供了丰富的组件库和通用的API,使开发者能够轻松创建各种复杂的用户界面。 然而,RNFlutter也存在一些不同之处。RN使用JavaScript进行开发,而Flutter使用Dart语言,这意味着开发者需要学习不同的编程语言。另外,RN采用的是原生组件的渲染方式,而Flutter则是通过自定义渲染引擎进行绘制。这一差异导致Flutter在性能和用户体验方面更具优势,但对于复杂界面和特定平台功能的需求,RN可能更加灵活。 综上所述,RNFlutter都是优秀的移动应用开发框架,具有各自的优点和适用场景。开发者可以根据项目需求、个人技能和团队资源来选择适合的框架。无论选择哪个,都能够高效地开发出高质量的移动应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值