跳到主要內容

跨平台實作

注意

本文檔指的是正在積極推廣的新架構

React Native 渲染器利用核心渲染實作,以便跨平台共用

在先前的 React Native 渲染系統中,React Shadow Tree、版面配置邏輯和視圖扁平化演算法是針對每個平台實作一次。目前的渲染器設計為跨平台解決方案,透過共用核心 C++ 實作。

React Native 團隊計畫將動畫系統納入渲染系統,並將 React Native 渲染系統擴展到新的平台,例如 Windows,以及遊戲機、電視等作業系統。

針對核心渲染系統利用 C++ 引入了幾個優勢。單一實作降低了開發和維護成本。它提高了建立 React Shadow Tree 和版面配置計算的效能,因為在 Android 上整合 Yoga 與渲染器的額外負擔已降至最低(即不再需要 JNI 處理 Yoga)。最後,每個 React Shadow Node 的記憶體佔用量在 C++ 中比從 Kotlin 或 Swift 分配時更小。

團隊也利用 C++ 功能來強制執行不可變性,以確保不會發生與並行存取共用但未受保護資源相關的問題。

重要的是要認識到,Android 的渲染器用例仍然會產生 JNI 的成本,主要用於以下兩個用例

  • 複雜視圖(例如 TextTextInput 等)的版面配置計算需要透過 JNI 傳送 props。
  • 掛載階段需要透過 JNI 傳送變更操作。

團隊正在探索使用新的機制 ByteBuffer 取代 ReadableMap 來序列化資料,以減少 JNI 的額外負擔。我們的目標是將 JNI 的額外負擔減少 35–50%。

渲染器提供其 C++ API 的兩個方面

  • (i) 與 React 通訊
  • (ii) 與宿主平台通訊

對於 (i),React 與渲染器通訊以渲染 React Tree 並「監聽」事件(例如 onLayoutonKeyPress、觸控等)。

對於 (ii),React Native 渲染器與宿主平台通訊,以在螢幕上掛載宿主視圖(建立、插入、更新或刪除宿主視圖),並監聽使用者在宿主平台上產生的事件

Cross-platform implementation diagram