很多公司开发安卓和ios都用原生 Native 代码,不同平台代码没有交集。但是对于产品同样一个需求,需要两个team来实现成本比较高,而且需要比较大的测试资源,还有就是功能上线下线麻烦,热更新技术有局限性。
h5-web
Android和ios中的web-h5技术可以通过内嵌页、外链页达到多端统一,客户端实现手段:webview+URL,但是web-h5技术内存占用大,cpu占用高,有不少bug,用户体验一般,webview对于js dom的渲染能力差。所以这种技术只能解决部分痛点,并且没能达到我们想要的效果。我们想要的是在用户体验一致的前提下完全解放客户端开发,满足产品想要的东西
React Native
React,是由Facebook于2013年推出的一个JS开发框架。原因是Facebook的前端技术人员觉得市面上的所有JS框架都很垃圾,所以就自己发明了一套,结果发现意外的好用,然后就开源了。
由于React的设计思想在当时过于超前,性能出众,组合自由,语言设计和逻辑设计又十分简单,能大大减少前端开发的时间。所以得到了越来越多的人的关注和使用,成为了主流WEB开发框架之一。
随着越来越多的功能和生态的加入,React慢慢成为了前后端通吃的WEB解决方案,并且社区繁荣,使用之广。2015年,Facebook突然觉得React可以作为客户端UI开发框架,因此发布了React Native。
RN是由Facebook于2015年发布的,他是React的Native版本,旨在通过JS来开发客户端界面和逻辑,节省成本和时间,达到一个代码,多端通用的目的,经过2年的发展,RN的性能得到大幅提升,目前已经能与原生媲美,社区繁荣。
React Native好处
- 一行代码,多端运行。
- Learn once,write anywhere.
- 我们认为RN是MVC结构中的V,少量C和M。
React Native实现
底层通过C++统一实现,对外封装Java、Objective-C,对内封装JS,通过JSBridge实现JS-native的通信,实现线程模型等。自己的绘制线程UIThread以及Application管理体系
JS通过映射module的方式来构建原生View,并将view组合携带数据attach到ReactView,ReactView再被添加到具体Activity中,通过JSBridge与JS通信,所以生命周期对应Activity,一个View是一个JSApplication。
因为是映射,所以RN的view效果和原生一致,性能也一致,那这样为什么还说是媲美,因为RN加载需要读取bundle,这步会因为构建整个RN体系而导致速度偏慢,但是加载后所以操作都是组件操作。
只支持基础类型
double、boolean、String等。Map、List。(Writeable以及Readable)JS操作为Map操作、弱类型。
Alert.alert(
‘Title',
‘Msg',
[
{text: 'Cancel', onPress: () => MeetyouReact.showToast('Cancel Pressed’),
{text: ‘OK’, onPress: () => MeetyouReact.showToast ('OK Pressed')},
])
renderImages() {
return (
<View>
<Image
style={width:100,height:200}
source={{uri: 'http://facebook.github.io/react/img/logo_og.png'}}
/>
</View>
);
}
热门评论
1234567896
๛ก(ー̀ωー́ก)