NativeModule 是 JavaScript 与原生应用之间的核心通信桥梁,通过调用 NativeModule,Lynx 前端页面能够访问和控制 原生功能。本文将介绍结合具体代码示例,详细解析 NativeModule 在 Trace 中的调用过程和执行流程。
自 Lynx 3.2 版本起,Trace 页面新增了一个 NativeModule 的 Track,用于集中展示所有 NativeModule 调用记录。每个条目的长度是一次 NativeModule 发起请求至请求完成的整体耗时。
基础展示: 点击 NativeModule Track 中的具体条目,可通过五种颜色标识直观呈现该次调用各阶段的粗略耗时。
详情面板: 详细展示调用名称、入参信息及各阶段的精确耗时数据(包括参数转换、平台逻辑、线程切换等关键节点耗时)。
下面以一次前端代码的 NativeModule 调用为例,描述 Trace 中的执行时机。
NativeModule 调用可以划分为以下五个主要阶段:
该阶段对应 Trace 中 JSValueToPubValue 时间段,主要将 JS 数据(示例代码中的第4-7行)转换成 Native 类型数据。
该阶段对应 Trace 中从 CallPlatformImplementation 开始到 NativeModule::PlatformCallbackStart 的时间段,Native 方法执行具体功能并返回平台层数据。
其中,CallPlatformImplemention 发生在后台线程上,而 CallPlatformImplemention Trace 事件与 NativeModule::PlatformCallbackStart 之间的逻辑,通常是在其他线程中完成的。
该阶段对应 Trace 中从 NativeModule::PlatformCallbackStart 到 NativeModule::Callback 开始的时间段。
该阶段对应 Trace 中 PubValueToJSValue 时间段,将平台层返回的数据转换为 JS 类型参数。