主线程运行时

PrimJS

主线程采用 PrimJS 作为运行时引擎。PrimJS 是一种专为 Lynx 设计的轻量级、高性能 JavaScript 引擎。PrimJS 构建于 QuickJS 之上,与 QuickJS 相比,提供了更优的性能和开发体验。

同时 PrimJS 提供了一种高性能的 FFI 能力,可以较低成本的将 Lynx 对象封装为 JS 对象返回给 FFI 调用者,相比传统的 FFI 性能优势明显。但是这种类型的 JS 对象并不是 Object Model,Lynx 引擎无法给该对象绑定 setter getter 方法,只能提供 FFI 将其作为参数传入,实现类似的功能。

Element PAPI 注入

为了实现高性能,主线程运行时中所提供的 Element PAPI 便基于以上方式实现。由于 ReactLynx 开发者大多数场景下不需要直接操作 Element,所以这种高性能 FFI 的限制并不会带来使用体验的下降。

如果开发者需要直接操作 Element,我们基于 Element PAPI 提供了 main-thread-element,用于提升开发体验。

Lynx API 注入

由于主线程具有特殊性,因此我们仅在主线程中提供不影响渲染的 Lynx API,这些 API 是后台线程 API 的子集。

运行时脚本格式

出于对性能的优化考虑,主线程脚本使用经过 PrimJS 编译的字节码格式。这一格式避免了脚本在运行时的解析过程,相较于普通文本格式的脚本,字节码格式的加载速度可提升约四倍。

除非另有说明,本项目采用知识共享署名 4.0 国际许可协议进行许可,代码示例采用 Apache License 2.0 许可协议进行许可。