【问题标题】:What's the difference between bridging a module with C++ or with JSI in React Native?在 React Native 中使用 C++ 或 JSI 桥接模块有什么区别?
【发布时间】:2021-10-08 20:44:45
【问题描述】:

在 React Native 中,可以通过多种方式从 Android 和 iOS 引入本机功能。 我一直认为所有可能的方式都受到 Java/Kotlin 和 Objective-C/Swift 等平台相关语言的限制。但是,我注意到即使从 C++(不使用 JSI)也仍然可以桥接本机功能。 具体来说,我注意到从react-native-builder-bob 可以轻松启动一个使用 C++ 桥接本机模块的包。

此时我想知道,如果 JSI 已经可以将 JS 与 C++ 集成,那么 JSI 引入了什么新功能?为什么它应该比当前解决方案带来性能改进?

对于我缺乏知识,我提前道歉,但我真的找不到答案。

【问题讨论】:

    标签: c++ react-native react-native-bridge react-native-jsi


    【解决方案1】:

    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 Runtime 具有 C++ API,但可以在 JSI 和您现有的 Java 或 Swift 代码之间建立 C++ 层。

    JSI 是未来新的 React Native 架构的基础,其中包括:Fabric、TurboModules、CodeGen。阅读更多:https://github.com/react-native-community/discussions-and-proposals/issues/91

    【讨论】:

    • 非常感谢您的回答! (抱歉回复晚了)
    猜你喜欢
    • 1970-01-01
    • 2020-01-14
    • 2019-09-23
    • 2016-04-11
    • 2010-10-02
    • 2017-01-03
    • 2019-06-21
    • 2015-08-20
    相关资源
    最近更新 更多