如上图,React Native的跨平台主要由三层构成,其中C++做为中间设配层桥接,从而实现JS和Native的双向通信。javascript
其实RN总体框架的目的就为了让Native端能够解析,执行JS脚本java
WebKit是一个开源浏览器引擎(Safari、Chrome等使用)、相似的还有Gecko(Mozilla Firefox 等使用)和Trident(IE 使用)react
JavaScriptCore是webKit中默认的JS引擎,Google使用V8代替JavaScriptCore做为其chromium的JS引擎(Node.js的引擎也是V8)。 在RN框架中,IOS上直接使用内置的javascriptcore、Android中使用的是jsc.so。 而Weex使用的则是V8引擎;c++
UI层 View: react native中全部的标签都不是真实控件,Js代码中所写的控件,都做为一种Map中的Key值。JS端经过这个Key组合的Dom,放到Virtual Dom这个虚拟的JS数据结构中,而后经过JSBridge传递到Native,Native端会解析这个Dom,从而获得对应的Native控件。好比JS中的
API Module: 原生端提供的各类Module模块参数,包括ModuleID、MethodID、Params,和JS端提供的各类Module模块参数,都会在C++层的Bridge 中注册。 Js/Java 调用的ModuleID、MethodID、Params,经过Birdge映射,转换成Java/Js对应的ModuleID、MethodID、Params,实现两端方法的互调。通讯的数据和指令,在中间层会专成Json传输。 react-native
消息循环、线程模型: React Native 为JS引擎建立了一个独立的线程,在Android上主要由三个线程,每一个线程都由与其绑定的消息队列浏览器
三个线程的交互主要借助Android 的Handler来完成。网络