如上圖,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來完成。網絡