ReactNative调研报告

2015年9月15日Facebook发布了ReactNative for Android,引发了学习使用ReactNative开发跨平台引用的热潮。目前React Native发布到了0.44的版本。最近项目中考虑是否要接入ReactNative,所以对ReactNative进行了一些调研性的工作。

ReactNative简介

在reactnative中文网上有以下简介:

React Native使你能够在Javascript和React的基础上获得完全一致的开发体验,构建世界一流的原生APP。  
React Native着力于提高多平台开发的开发效率 —— 仅需学习一次,编写任何平台。(Learn once,write anywhere)  
Facebook已经在多项产品中使用了React Native,并且将持续地投入建设React Native。

React Native是使用javascript和react来实现跨平台开发的,React Native提倡组件化开发: 即提供一个个封装好的组件,组件相互嵌套形成新的组件.你可以完全将App使用ReactNative编写,也可以使用原生和react native混合和的方式。由于目前React Native才发布到0.44版本,还没有发布正式的1.0,其变动相对比较频繁,在react native升级后经常导致项目不能运行,你必须去做额外的工作来保证项目正常的运行。不过最近React Native的发布已经慢慢趋于稳定了,现在基本是1-2个月发一次版本更新,更新内容也没有之前变化那么大了。

众所周知Android的碎片化和厂商的定制化是影响app稳定的很重要的原因之一,尤其是在国内,各个手机厂商都对Android系统进行了深度定制。这样的问题在ReactNative上也有很明显的体现,ReactNative在兼容Android各个系统版本和厂商版本的时候会暴露出不少的问题,目前React Native只支持Android 4.1以上,IOS 7.0以上的版本.附上最新的Android版本分布,Android3月份分版本分布可以看到Android 4.0的应用占比基本在%1左右,所以影响不大。

在2017年3月爆发了一股苹果商店禁止热更新的事件,很多人都担心苹果是否会封掉Reactnative,其实苹果想要禁止的是热更新的功能。在苹果的拒绝邮件上也只是说明拒绝热更新的能力。从目前来看,这2个月苹果ReactNative依然可以过审。在各个论坛上也并未发现此次禁止热更新对ReactNative有较为明显的影响。

ReactNative VS 原生 VS Hybrid

实现

(hybrid和 phoneGap APICloud AppCan等思想相同)
hybrid是一款h5的跨终端的解决方案,思想是 编写一次,就可以跨平台。
本质上hybrid还是web界面,只不过针对各个平台提供了一些调用native方法的api,通过js 和 native交互进行通信。
用web渲染界面是比较耗时的,为了解决界面的渲染耗时,react-native将界面用原生实现,而js部分只负责描述界面并将描述后的界面通过js和native的交互机制通知给终端,让终端根据js传递过来的界面描述信息来选择本地的控件进行界面的拼装。react-native的思想是 学习一次,可以跨平台开发(仍需要各个终端的人配合)。

性能

原生 > ReactNative > Hybrid
具体的性能对比参数可以查看H5、React Native、Native应用对比分析

开发&维护

以下成本和更新能力模块参考了H5、React Native、Native应用对比分析

维护成本

Hybrid < ReactNative < 原生
Hybrid是H5的夸平台解决方案,ReactNative可以达到百分之90左右的代码共用,但仍需要终端支持。

H5/Hybird: Web代码 + iOS/Android平台支持

React Native:可以一个开发团队 + iOS/Android工程师;业务组件颗粒度小,不用把握全局即可修改业务代码。

Native:iOS/Android开发周期长,两个开发团队。

总结:React Native 统一了开发人员技术栈,代码维护相对容易。

更新能力

H5/Hybird: 随时更新,适合做营销页面,目前携程一些BU全部都是H5页面;但是重要的部分还是Native。

React Native:React Native部分可以热更新,bug及时修复。

Native:随版本更新,尤其iOS审核严格,需要测试过关,否则影响用户。

React-Canvas

为了解决webapp渲染dom的效率问题,Flipboard推出了一款react-canvas,它的思想是用做游戏的方式来做app。界面渲染针对到canvas上,通过重新定义绘制过程来减少web界面渲染时候的开销问题。
react-canvas 也是使用的css-layout和react-native一致,也集成了react,只是最终界面是通过canvas展示的。
react-canvas因为是针对webapp的,所以它的灵活性要比react-native强,渲染的卡顿问题比较接近原生,由于react-canvas还是一个webapp所以有一些原生的界面效果不太好处理。react-canvas如果要和native交互需要单独提供本地的基础库和js和native的通信机制。
其实react-native可以理解成重写了一个简版的web浏览器,它只支持一些特殊的定制化界面,用native实现界面渲染来达到原生的体验效果。

案例

目前国内使用ReactNative的还不是很多(有些小的应用是完全用React Native来实现的),比较出名的是 携程的火车票模块, QQ空间,销售易的包中也发现了React Native的痕迹。要想看到更多的国内案例可以通过react native中文网收集的案例上查看: ReactNative案例

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...
在平时工作中的某些场景下,你可能想在整个组件树中传递数据,但却不想手动地通过 props 属性在每一层传递属性,contextAPI 应用而生。
楼主最近入职新单位了,恰好新单位使用的技术栈是 react,因为之前一直进行的是 vue2/vue3 和小程序开发,对于这些技术栈实现机制也有一些了解,最少面试...
我们上一节了了解了函数式组件和类组件的处理方式,本质就是处理基于 babel 处理后的 type 类型,最后还是要处理虚拟 dom。本小节我们学习下组件的更新机...
前面几节我们学习了解了 react 的渲染机制和生命周期,本节我们正式进入基本面试必考的核心地带 -- diff 算法,了解如何优化和复用 dom 操作的,还有...
我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安...
上一小节我们学习了 react 中类组件的优化方式,对于 hooks 为主流的函数式编程,react 也提供了优化方式 memo 方法,本小节我们来了解下它的用...
开源不易,感谢你的支持,❤ star me if you like concent ^_^
hel-micro,模块联邦sdk化,免构建、热更新、工具链无关的微模块方案 ,欢迎关注与了解
本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition api这个关键词,准确的说setup是由...
ReactsetState的执行是异步还是同步官方文档是这么说的setState()doesnotalwaysimmediatelyupdatethecomponent.Itmaybatchordefertheupdateuntillater.Thismakesreadingthis.staterightaftercallingsetState()apotentialpitfall.Instead,usecom