实现机制对比
React Native依赖web技术,具有前端亲和力,融合HTML标签思想,虚拟DOM的机制映射成原生的View.利用原生语言(Objective-C,JAVA)与JS桥接通信,实现一套跨平台UI开发框架,开发层面是前端思想,实质还是完全依赖iOS,安卓原生的view进行渲染.
Flutter则是十分极客精神的作品,自己实现渲染引擎,脱离iOS,安卓原生的view的束缚,并且重新使用一门语言,集成自己的脚本解析引擎跟原生语言(Objective-C,JAVA)通信.
开发方式,难易程度对比
React Native具备天然的web亲和力,并且基于react.js的开发思想,使得前端的人也可以通过短时间的学习迅速上手.
Flutter使用了一个新的Dart语言进行开发,就使得开发者需要重新学习这门语言,但好的是Dart语言简洁有力,上手也不会太难.
社区生态
论成熟度,React Native是2015年出来的,在当时具备划时代的新颖开发思想,受到全球移动开发者的关注,参与使用者众多且热情,有了很多扩展组件,满足大部分移动应用开发需求.
而且由于有了大量受众就有了一个历练场,遇到的开发问题也能即使受到官方的重视.比如2017苹果禁止热更新的策略,在有可能波及到React Native的情况下, Facebook工程师及时的改进了React Native热加载iOS原生模块使用的插入特殊section段进行识别机制,以防止苹果审核判定有热更嫌疑.
另还有2018年上半年Airbnb发表一系列文章,在使用React Native中遇到的很多问题,宣布放弃使用,在这样的状况下,React Native团队也是进行了反思,计划进行底层的一些重构.这是一个框架朝着良性发展的好的态势.在热度中成长,在批评中不断完善.
Flutter是2018年出来并受到关注的.因为它极客的设计,以及号称吸取了React Native的一些缺点经验,尤其是性能方面进行了改良,这些亮点使得大众以惊叹与敬畏的心情对它产生了兴趣.是个有力的新生儿,这就说明了它目前的社区生态还处于发展阶段,一些第三方的扩展组件需要时间,需要热情的开发者来慢慢填充,完善.
并且目前Flutter 还处于 beta阶段,issue比较多.
国内探索进程
React Native:
京东团队比较早的进行了探索研究,组织团队研究源码,进行库的瘦身,加载性能优化,拆分打包等等,并应用于京东APP.
携程团队,由于展示型业务中心的产品,也是很积极地投身入React Native的使用探索.并且积极地对外发表团队的研究成果以及使用心得,具有很大的参考意义.
Flutter:
阿里巴巴闲鱼团队最早进行了尝鲜踩坑,并有一帮极客的工程师热情的对Flutter的底层做一些深入研究.也只在闲鱼的商品详情页面使用了Flutter开发.
美团也比较积极的进行了一些探索,也是比较谨慎的先进行比较深入的底层研究,对外也比较积极的发表文章共享一些研究成果.
第三方库,UI组件量
Flutter 目前有1000+ library。
ReactNatve 专用library有11000+ (以react-native名称开头的包),与web开发可以共用的包700000+
包体大小
App体积
Flutter iOS空项目 30M左右,Android空项目 7M左右。 (iOS需要额外集成Skia)
React Native iOS空项目 3M左右,Android20M左右。(Android会加入OKHttp导致体积增大)
跨平台兼容问题
Flutter是谷歌出的.因此Android上适配要比iOS好一些,RN在 Android 上有可能遇到兼容性问题,但不是大问题,有解决方案.
React Native在iOS上面兼容性好一些, iOS的控件直接取自原生的控件.
总结
React Native足够成熟,Flutter是有力的新生力量.
React Native满足正常的一些展示型的app开发需求游刃有余.
Flutter满足新鲜与极客技术的追求前提下,可以尝试,但要及时关注业界对它的探索.
个人
曾对React Native实现机制有过研究积累,以及RN工程构建源码进行过探索,对原生模块类映射到js层的桥接源码进行过研究.因此使用React Native进行开发,就可以利用之前的经验,解决开发中的问题.
网友评论