react-native 简述
1. RN 是什么
2. RN 与传统Hybrid框架相比的优势
3. RN的优势
4. RN的劣势
5. RN开发重点关注的问题
1 RN是什么
2 RN 与传统Hybrid框架相比的优势
传统的如ionic,phonegap / cordova 采用webview渲染页面,使用中会出现卡顿现象,性能较差。RN相比较具有如下几个优势:
- 原生打包(IOS和Android)
- 虚拟DOM
- 保留平台特性
- Flexbox 布局
- 高性能的"JsBridge"
采用原生打包可以不依赖平台特性,打包完全可控,实现底层与业务代码分离,无第三方打包依赖。
采用虚拟DOM,对复杂ui多层嵌套造成的性能问题进行优化
采用高性能的“JsBridge”优化页面渲染
为什么要使用JsBridge呢?在开发中,为了追求开发的效率以及移植的便利性,展示强的页面偏向于使用h5完成,功能性强的偏向于native实现。
为了h5中具备native的体验,native层需要通过JsBridge 暴露原生接口给h5调用。比如微信jssdk。
传统Hybrid中是如何实现javascrip和java相互通信的呢?参见:
JsBridge实现Javascript和Java的互相调用
Android JSBridge的原理与实现
总结:Java调用Javascript是通过WebView.loadUrl("javascript:xxxx"),Javascript调用Java是通过WebViewClient.shouldOverrideUrlLoading()等三种方式实现。
当然,由于webview在android4.2下存在安全隐患 WebView中接口隐患与手机挂马利用, 需要另辟蹊径去实现。
为什么说RN有着高性能的JsBridge呢?首先,从实现上,RN抛弃了webview作为页面渲染的容器:Android通过jni层c/c++ 代码实现了一套高性能的通信机制,
IOS端使用JavascriptCore做js解析引擎。对IOS说,RN在性能和兼容性上都没什么大的问题(兼容IOS7上)。Android端由于Java层使用的一个API(Android4.1加入)(具体API待了解)
进行协同绘制UI,故RN在4.1下不兼容。RN与原生通信部依赖webview,而是与原生混合开发。
3 RN的优势
- 跨平台开发,Learn once, Write anywhere.
- 性能接近原生,优于传统Hybrid和h5
- 热更新机制,快速迭代更新
- 开发体验好
- 降低开发成本,原生开发工程师搭建基础环境,后期可以有react-native工程师快速开发迭代。保证ios端和android端产品功能同步迭代
4 RN 的劣势,每一个优势对应一个劣势
- 为了试下跨平台,在开发设计的时候需要做好API的设计,统一API接口。需要考虑:
一. js如何共用一套
二. api模块如何设计
三. ios & android控件ui兼容
四. 本地桥接兼容
五. 图片资源兼容 - 热更新带来的问题(待补充)
1.0正式版未正式发布,版本迭代维持20天一次。crush率上升。如何处理好版本更新带组件不兼容的问题,
原生层与js层设计,原生层只做基础桥接 - Android 打包包体过大
一. bundle多大
二. Android端JsBridge由c++实现。根本原因是生成的so库过大
解决方法是:考虑根据平台拆分so库(分为x86和armv7),或者不考虑x86 - RN本身不兼容web端
开源方案是 携程的moles(计划开源),淘宝FED的 react-web - 页面如何降级
IOS可以不考虑(IOS7一下不考虑 )
Android 4.1 以下不支持RN,如何做容灾措施(可用web页面或者webview实现)
5 RN开发中重点关注的问题
bundle拆包--框架打包和业务打包分离
热更新机制(增量更新)
web降级
统一API库设计(实现IOS和Android两端跨平台调用)
listview 和 scrollview 优化
数据流管理
视频教程 菜鸟窝
react-native 简述的更多相关文章
- React Native实践之携程Moles框架
编者:本文来自携程框架研发部高级经理魏晓军在第二期[携程技术微分享]上的分享,以下为整理后的文字实录.视频回放可点击这里.关注携程技术中心微信公号ctriptech,可获知更多微分享课程信息. 因为支 ...
- React Native教程 - 调用Web API
react-native官网Fetch介绍:https://facebook.github.io/react-native/docs/network.html#content react-native ...
- React Native之携程Moles框架
因为支持用javascript开发原生应用,React Native一推出就受到不少公司热捧,各家都跃跃欲试.但有一个痛点是,在移动端,我们是否有必要开发多套程序:iOS.Android和H5?本次将 ...
- React Native 二维码扫描组件
学rn得朋友们,你们知道rn开源项目吗?来吧看这里:http://www.marno.cn/(rn开源项目) React Native学习之路(9) - 注册登录验证的实现 + (用Fetch实现po ...
- React Native 之 Text的使用
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- React Native环境配置之Windows版本搭建
接近年底了,回想这一年都做了啥,学习了啥,然后突然发现,这一年买了不少书,看是看了,就没有完整看完的.悲催. 然后,最近项目也不是很紧了,所以抽空学习了H5.自学啃书还是很无趣的,虽然Head Fir ...
- 史上最全Windows版本搭建安装React Native环境配置
史上最全Windows版本搭建安装React Native环境配置 配置过React Native 环境的都知道,在Windows React Native环境配置有很多坑要跳,为了帮助新手快速无误的 ...
- 【腾讯Bugly干货分享】React Native项目实战总结
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...
- React Native环境搭建以及几个基础控件的使用
之前写了几篇博客,但是没有从最基础的开始写,现在想了想感觉不太合适,所以现在把基础的一些东西给补上,也算是我从零开始学习RN的经验吧! 一.环境搭建 首先声明一下,本人现在用的编辑器是SublimeT ...
- React Native组件介绍
1.React Native目前已有的组件 ActivityIndicatorIOS:标准的旋转进度轮; DatePickerIOS:日期选择器: Image:图片控件: ListView:列表控件: ...
随机推荐
- files list file for package 'xxx' is missing final newline
#!/usr/bin/python # 8th November, 2009 # update manager failed, giving me the error: # 'files list f ...
- nginx下搭建CodeIgniter问题集锦
nginx环境下CodeIgniter会出现一些问题! 1.数据库驱动连接失败! 出现如下问题: A PHP Error was encountered Severity: Warning Messa ...
- linux下QT程序输出乱码解决方法
参考文章:http://blog.csdn.net/jiang1013nan/article/details/6667871 http://my.oschina.net/zjlaobusi/blog/ ...
- window.onload和$(document).ready(function(){})的区别
前段时间在面试之前查找并整理了一下window.onload和$(document).ready(function(){})区别,今天有时间更到我的博客上,由于本人资历尚浅,如有不对的地方,还请指正. ...
- About_Smarty
Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一.它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码 ...
- (转)对博士学位说永别 by 王珢
对博士学位说永别 by 王垠 经过深思熟虑之后,我决定再次“抛弃”我的博士学位.这是我第三次决定离开博士学位,也应该是最后一次了.这应该不是什么惊人的消息,因为我虽然读博士10年了,可是我的目标从来就 ...
- 一次sql排序的问题。
select date, count(fail) as fail,count(win) as win from (select date,(case (result) when 'fail' then ...
- PHP 之 CURL 模拟登陆并获取数据
1.CURL模拟登陆的流程和步骤 2.tempnam 创建一个临时文件 3.使用CURL模拟登陆到PHP100论坛 <?php $cookie_file = tempnam('./temp',' ...
- PMP备考_第五章_项目范围管理_实践思考
项目范围管理 前言 今天学习项目范围管理的内容,深切的感受到了原单位在项目管理方面存在的问题,今天在这里做一个总结,既相当于对项目范围的一个学习整理,也相当于自己对项目实践过程中存在问题的一个思考. ...
- 第三方框架之ThinkAndroid 学习总结(二)
上文记录了一些ThinkAndroid常用的模块,本文继续介绍ThinkAndroid中的网络化模块. 按照惯例先上Github原文地址:https://github.com/white-cat/Th ...