React Native(反应 本地) 简称RN,是Facebook在2015年的F8大会上宣布的。刚开始仅支持ios,现在,主流的iOS和Android支持度已经很好了。主要是提供了一种多平台同时运行的语言环境。RN的口号是:Learn Once,Write AnyWhere。学起来炒鸡简单。但是各个平台的适配等工作,就得慢慢自己折腾!这个也和移动端设备的多样有关,不同设备从硬件到软件的环境都可能不同。比如Android有返回等物理按键,但是iPhone就没有这样的按钮。等等类似的这种情况都使得我们不得不单独做适配。

RN开发的应用最终的实现形式依然是原生代码,比原始混合应用(原生+WebView)就有一定的优势。

优势:

  • RN在跳过了原生平台繁琐API学习成本的同时。其高效和跨平台的优势也很明显。
  • 在各大厂商和全球开发者的监督下,稳定性与性能和原生平台的近似。
  • 对于线上的Bug和紧急需求,其具备快速发布的能力。

劣势:

  • 维护第三方库依赖Facebook
  • 稳定性;针对不同的设备。RN开发需要更多的逻辑开销去思考不同设备之间的兼容问题。
  • 调试成本。RN是一个相对比较重的库。会增加代码库的复杂度,其调试与原生相比有着一定的困难。

没有比较就没有伤害,与现在火起来的Flutter相比。

Googel的Flutter设计跟react-native很像,但是比RN进了一步!

特点:1.Flutter是完全免费、开源的。2.专注于 Android and iOS 低延迟的输入和高帧率。3.开发语言是Dart。

两者相比:

  • Flutter性能会更好无线接近原生的体验,Dart是AOT编译的,编译成快速、可预测的本地代码;
  • RN采用JS语言开发,基于React,对前端工程师更友好。Dart语言受众小;
  • Flutter自己实现了一套UI框架,丢弃了原生的UI框架。而RN还是可以自己利用原生框架,两个各有好处。Flutter的兼容性高,RN可以利用原生已有的优秀UI;
  • RN的布局更像css,而Flutter的布局更像native布局,但是去掉xml通过代码直接写需要适应下;
  • Flutter的第三方库还很少,RN发展的早,虽然也还不完善,Flutter github还有3000多个issues要解决,还有很长的路要走。

Flutter实现跨平台采用了更为彻底的方案。它既没有采用WebView也没有采用JavaScriptCore,而是自己实现了一台UI框架,然后直接系统更底层渲染系统上画UI。所以它采用的开发语言不是JS,而Dart。据称Dart语言可以编译成原生代码,直接跟原生通信。

最后, 现在主流的移动开发平台是Android和iOS,之前还有过windows phone。从最开始的Hybrid混合开发技术,到RN的桥接技术,到现在新兴的Flutter技术,跨平台开发技术一直在演进。

跨平台开发第一个考虑的就是性能问题

RN的效率由于是将View编译成了原生View,所以效率上要比基于Cordova的HTML5高很多,但是它也有效率问题,RN的渲染机制是基于前端框架的考虑,复杂的UI渲染是需要依赖多个view叠加.比如我们渲染一个复杂的ListView,每一个小的控件,都是一个native的view,然后相互组合叠加.想想此时如果我们的list再需要滑动刷新,会有多少个对象需要渲染.所以也就有了前面所说的RN的列表方案不友好;

Flutter 吸收了前两者的教训之后,在渲染技术上,选择了自己实现(GDI),由于有更好的可控性,使用了新的语言Dart,避免了RN的那种通过桥接器与Javascript通讯导致效率低下的问题,所以在性能方面比RN更高一筹;有经验的开发者可以打开Android手机开发者选项里面的显示边界布局,发现Flutter的布局是一个整体.说明Flutter的渲染没用使用原生控件进行渲染

参考:https://www.jianshu.com/p/895f4b268d50

https://www.jianshu.com/p/51c4f7f6e446

Logo

智屏生态联盟致力于大屏生态发展,利用大屏快应用技术降低开发者开发、发布大屏应用门槛

更多推荐