在 React Native 中用 C++ 或 JSI 桥接模块有什么区别?
What's the difference between bridging a module with C++ or with JSI in React Native?
在 React Native 中,可以通过多种方式从 Android 和 iOS 引入原生功能。
我一直认为所有可能的方式都受到平台相关语言的限制,如 Java/Kotlin 和 Objective-C/Swift。但是,我注意到即使从 C++(不使用 JSI)也可以桥接本机功能。
具体来说,我注意到从 react-native-builder-bob 开始,可以轻松启动一个使用 C++ 桥接本机模块的包。
在这一点上我想知道,但是如果已经可以将 JS 与 C++ 集成,那么 JSI 引入了什么是新的?为什么它应该比当前解决方案带来性能改进?
对于我的知识匮乏,我提前表示歉意,但我确实找不到答案。
Native 和 JS 之间的当前 React Native Bridge
架构异步工作并且仅在 JSON 中传输数据。
它产生下一期:
异步调用
- 许多线程并在它们之间跳转:JS、Shadow、Main、Native...
- JS 和主线程不直接通信(慢 UI 渲染)
JSON
- JS 和 Native 线程之间没有数据共享
- 由于 JSON 序列化(瓶颈)
,数据传输缓慢
您可以桥接到任何本机代码 Java/Konlin、ObjC/Swift、C++ 等,但您总是会遇到上面的问题。
React Native JSI
为 JS 运行时引擎提供 API 并允许直接向 JS 公开本机函数和对象 - 根本没有桥。
它提供了以下优点:
- 从 JS 线程到 Native 的同步调用,反之亦然
- 使用直接调用 UI 主线程进行快速渲染
- 线程间数据共享
您必须仅使用 C++ 才能与 JSI 一起工作,因为 JS 运行时具有 C++ API,但可以在 JSI 和您现有的 Java 或 Swift 代码之间创建 C++ 层.
JSI 是未来新 React Native 架构的基础,其中包括:Fabric、TurboModules、CodeGen。阅读更多:https://github.com/react-native-community/discussions-and-proposals/issues/91
在 React Native 中,可以通过多种方式从 Android 和 iOS 引入原生功能。 我一直认为所有可能的方式都受到平台相关语言的限制,如 Java/Kotlin 和 Objective-C/Swift。但是,我注意到即使从 C++(不使用 JSI)也可以桥接本机功能。 具体来说,我注意到从 react-native-builder-bob 开始,可以轻松启动一个使用 C++ 桥接本机模块的包。
在这一点上我想知道,但是如果已经可以将 JS 与 C++ 集成,那么 JSI 引入了什么是新的?为什么它应该比当前解决方案带来性能改进?
对于我的知识匮乏,我提前表示歉意,但我确实找不到答案。
Native 和 JS 之间的当前 React Native Bridge
架构异步工作并且仅在 JSON 中传输数据。
它产生下一期:
异步调用
- 许多线程并在它们之间跳转:JS、Shadow、Main、Native...
- JS 和主线程不直接通信(慢 UI 渲染)
JSON
- JS 和 Native 线程之间没有数据共享
- 由于 JSON 序列化(瓶颈) ,数据传输缓慢
您可以桥接到任何本机代码 Java/Konlin、ObjC/Swift、C++ 等,但您总是会遇到上面的问题。
React Native JSI
为 JS 运行时引擎提供 API 并允许直接向 JS 公开本机函数和对象 - 根本没有桥。
它提供了以下优点:
- 从 JS 线程到 Native 的同步调用,反之亦然
- 使用直接调用 UI 主线程进行快速渲染
- 线程间数据共享
您必须仅使用 C++ 才能与 JSI 一起工作,因为 JS 运行时具有 C++ API,但可以在 JSI 和您现有的 Java 或 Swift 代码之间创建 C++ 层.
JSI 是未来新 React Native 架构的基础,其中包括:Fabric、TurboModules、CodeGen。阅读更多:https://github.com/react-native-community/discussions-and-proposals/issues/91