跨平台实现
注意
本文档引用了 新架构,该架构正在积极推广中。
React Native 渲染器利用共享的核心渲染实现来跨平台使用
在之前的 React Native 渲染系统中,React 影子树、布局逻辑和 视图扁平化算法是针对每个平台分别实现的。当前的渲染器通过共享核心 C++ 实现被设计为一个跨平台解决方案。
React Native 团队计划将动画系统整合到渲染系统中,并扩展 React Native 渲染系统到新的平台,例如 Windows 以及游戏机、电视等的操作系统。
利用 C++ 作为核心渲染系统带来了多项优势。单一实现降低了开发和维护成本。它提高了创建 React 影子树和布局计算的性能,因为在 Android 上与 Yoga 集成的开销被最小化了(即 Yoga 不再需要 JNI)。最后,每个 React 影子节点的内存占用在 C++ 中比从 Kotlin 或 Swift 分配时更小。
该团队还利用 C++ 中强制不可变性的特性,以确保不会出现对共享但未受保护资源进行并发访问的问题。
重要的是要认识到,渲染器在 Android 上的用例仍然在两个主要用例中产生 JNI 的开销
- 复杂视图(例如
Text
,TextInput
等)的布局计算需要通过 JNI 发送属性 (props)。 - 挂载阶段需要通过 JNI 发送变动操作。
该团队正在探索使用新的机制来替换 ReadableMap
,利用 ByteBuffer
序列化数据以减少 JNI 的开销。我们的目标是将 JNI 的开销减少 35–50%。
渲染器提供了其 C++ API 的两个方面
- (i) 用于与 React 通信
- (ii) 用于与宿主平台通信
对于 (i),React 与渲染器通信以渲染 React 树并“监听”事件(例如 onLayout
, onKeyPress
, touch 等)。
对于 (ii),React Native 渲染器与宿主平台通信,以便在屏幕上挂载宿主视图(创建、插入、更新或删除宿主视图),并监听用户在宿主平台上生成的事件。