React Native VS Flutter评测

image

之前分别用iOS原生和Flutter写了一个空气质量App并对它们对性能、容量等做了对比评测. 很多小伙伴在下方留言说这样的对比没有意义, 认为Flutter根本不是用来替代原生也不可能超越原生开发. 我这里先做一个解释:

我在对比评测中提供了尽可能多的数据, 并不是想证明Flutter和原生比有多烂, 而是想告诉你如果选择了Flutter你的App包会增长多少倍、对App启动速度的影响会有多少秒, 好让大家将来在定技术栈的时候能够尽量心中有数.

当然也有网友提出和应该React Native来做对比, 毕竟这两个都是主攻跨平台开发. 其实我早就想做一个类似的对比评测, 前段时间公司出现变动, 周末难得抽空做了一个React Native版的Demo, 最终得出了今天这份评测报告.

Aireport(iOS原生)

Aireport Flutter(Flutter版)

RN版还在审核中, 大家可以自行下载体验一下.

1.安装包大小

Flutter应用安装包和安装后容量


image

React Native应用安装包和安装后容量


image

这个差距, emmmmmm, 这里给出iOS原生版应用的大小大约在2.5MB, 也就是说RN已经做到了比原生还要小的安装包. 这主要归功于两点:
  • 基于iOS自带的UI框架而非Flutter这样的自有框架(Flutter SDK有30MB左右)
  • 使用了OC而非Swift作为开发语言(本次预测大失败, Swift5并没有随着WWDC放出, 也就没能集成到iOS12中....)
  • iOS原生版其实实现了比其他版本更多的功能, 比如Weiget、通知
image

React Native较小的安装包带来的优势不仅是降低了下载门槛、减少了磁盘占用, 而且对于混合开发的压力也更小. 试想一个原生App因为几个页面使用了Flutter, 一行代码没写安装包就凭空增加了30MB, 这样的结果不是开发人员希望看到的.

2.启动速度

image

启动速度RN依然与原生不相上下, 并且要比Flutter好上一个等级. RN虽然使用js来构建应用程序, 但最终RN会将js转化成原生代码. 这就让RN的运行效率高出Flutter好几倍.

3.内存占用

image

内存占用方面, RN显然没有原生做的好, 与Flutter的差距也不大, 而且经测试发现, RN的内存占用不是很稳定, 页面刚生成的时候内存占用会高一点, 之后缓慢回落.

image

通过Xcode工具我们可以看到, RN(React-Native-Navigate)并没有使用iOS系统的导航系统, 而是以一种相对粗暴的形式直接覆盖在了上一个View上. 相反iOS原生系统的页面切换会在新页面显示完毕后将前一个页面去掉(不做渲染), 这样可以有效节省内存的消耗. 此外, RN的控件也没有使用UIKit中的现有组件, 而是通过最基本的UIView去组合模仿(比如NavigationBar). 这样做虽然可以减少安卓和iOS之间UI层的差异, 但显然优化的空间就变小了.

4.流畅度

React Native帧率


image

Flutter帧率


image

iOS原生帧率
image

我们可以看到, RN得益于UIKit的加持, 整体流畅度和原生非常接近, 比声称60帧的Flutter要好. 尤其是搜索页滚动的帧率. 但是在页面切换(红色区域)时漏出了马脚, 原因就在于上面提到的, RN并没有使用系统自带的导航系统, 而是自己做了一个类似的平移动画. 很可惜, 这个动画并没有跑满60帧, 但也要比Flutter好一点.

观察动画的时间和曲线可以发现, 原生的跳转动画时间更长, 但他的加速效果也是最好的, 其他两个平台的跳转动画就略显生硬.

最后可以分别观察一下CPU的占用, RN的表现可以说是非常好了, 尤其是在TableView滚动的时候, 其原因也很简单, 它没有使用reuse pool, 因此不需要频繁修改已存在的Cell, 坏处是随着Cell的增多, 内存压力也会越来越大.

5.iOS特性支持

由于最后还是用原生语言去实现, RN先天可以得到iOS的部分特性. 而且相比于Flutter, 线上热更新才是它真正的杀手锏. Flutter虽然理论上可以实现, 但部署起来还有很多的问题需要解决, 一切还是未知数. 此外, RN和Flutter都支持混编, 这就几乎解决了实现上的所有问题. 唯一的问题是, 有多少功能和特性需要用原生去实现, 这样的维护成本又有多高.

最后的最后还是要说一下, Flutter目前还在测试版, 不建议在生产环境使用, 因此以上做出的对比并不能代表Flutter最终的真实水平. 但可以预见, 在短期内Flutter还是无法撬动RN在跨平台开发中的地位, RN仍旧是目前跨平台开发的最优解. 但不可否认Flutter确实实现了Write Once,Run Anywhere, 只不过至少在Fuchsia出来之前, 我们都无法完整评估它的真实价值.

最后给出GitHub地址:

Aireport(iOS原生)

Aireport Flutter(Flutter版)

Aireport Flutter(React Native版)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容