React Native 与 Flutter 的对比

  • 真的已经很长时间没有写博客了。。这一年来因为项目需求一直在用 React Native 的框架来进行跨平台开发,这段期间不管是学习RN还是开发维护项目都一直很忙,抽个空来写写用RN开发的心得,也写写 RN 相比与另一个跨平台 flutter 这套框架的优缺点。说实话 RN 对于两个平台来说适配程度比较倾向于 iOS,而安卓的坑更多一些。刚开始入门 RN 的时候真的非常令人痛苦,报一个匪夷所思的错在 Google 翻了五页都没找到好的解决方法,而这样的遇坑解坑每天都会进行,直到现在已经完全可以稳定开发,这一路走来真的是很不容易。所以对于 RN 这个跨平台框架来说难是刚开始难,说简单多写几个页面之后感觉也很简单。因为现在RN已经很普及了,有些第三方库也基于成熟,走到现在来看,这样的跨平台开发框架真的很香~~

  • 公司一直在调研 flutter 是否可以取代 RN 来进行一套重构,但是一直没有实行,有两个原因吧,一、flutter 他一直没有改善 不能热更新 这个软肋,可能这一点会有争议,你直接走冷更新不就好了么,但是在项目中一旦在线上发现有bug或者这个需求只更需改js代码的话,及时走热更新真的会比冷更新效率提高不止几倍;二、第三方库比较少,还处在发展阶段,这点很明显了,现造轮子不是不行,而是对于项目进度来说真的太耗时间了。大体就这两点吧,但是如果你不介意这个的话,我觉得完全可以考虑一下 flutter,因为RN确实比较耗性能,这也是RN的一个软肋,鉴于RN是用js调用原生框架,所以渲染的是原生组件,而且JSX需要创建一个父视图才能包裹子视图,所以父视图只是一个承接作用,而没必要让用户看见他,进而有很多冗余的父视图被渲染,性能自然比较低。flutter就不同了,Facebook自己开发了一套渲染引擎Skia,可最⼤程度保证样式没有平台差异性,在release模式下性能大大提高。

  • 在这里我自己总结了一个表


    Flutter 与 React Native 的对比.png
  • release 包性能测试
    平台: iPhone 6 16GB iOS 12.1.4
    两者均采用Release模式
    测试方法:数据量均为1000个简单的左图右文的cell
    左图flutter,右图RN


    1000个cell.png

Flutter:
可以看到帧数接近于60FPS,即使快速滑动也没有卡顿


flutter_FPS.png

React Native:
相较于前者,React Native启动稍慢,卡顿明显,帧数曲线也没有前者平滑


RN_FPS.png

可能我对RN接触的比较多,而flutter仅仅限于demo的程度,所以可能会有主观倾向,这是我的个人看法,有看法不一样的可以一起讨论下~~