跨平台实现
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
本文涉及正在逐步推出的新架构。
React Native 渲染器采用可在多平台共享的核心渲染实现
在 React Native 之前的渲染系统中,React Shadow Tree、布局逻辑和 View Flattening 算法需要为每个平台分别实现。当前的渲染器设计为一个跨平台解决方案,通过共享核心 C++ 实现。
React Native 团队计划将动画系统集成到渲染系统中,并将 React Native 渲染系统扩展到新平台,例如 Windows,以及游戏机、电视等操作系统。
采用 C++ 实现核心渲染系统带来多重优势:单一实现降低了开发和维护成本;通过最小化 Yoga 与渲染器的集成开销(在 Android 上不再需要 JNI),提升了创建 React Shadow Trees 和布局计算的性能;最后,每个 React Shadow Node 在 C++ 中的内存占用小于 Kotlin 或 Swift 分配的对象。
团队还利用 C++ 的不可变性特性,确保不会出现并发访问共享但未受保护资源的问题。
需要注意的是,在 Android 平台上使用渲染器仍会产生 JNI 开销,主要存在于两个场景:
-
复杂视图(如
Text、TextInput等)的布局计算需要通过 JNI 传递 props -
挂载阶段需要通过 JNI 传递变更操作
团队正在探索使用 ByteBuffer 序列化数据的新机制替代 ReadableMap,以降低 JNI 开销。目标是将 JNI 开销减少 35–50%。
渲染器提供两个维度的 C++ API:
-
(i) 与 React 通信
-
(ii) 与宿主平台通信
对于 (i),React 与渲染器通信以渲染 React Tree 并"监听"事件(如 onLayout、onKeyPress、触摸事件等)。
对于 (ii),React Native 渲染器与宿主平台通信以在屏幕上挂载宿主视图(创建、插入、更新或删除宿主视图),并监听用户在宿主平台上触发的事件。
