这个项目能做什么
qzjs为C类应用提供带有平台抽象层(PAL)的可嵌入QuickJS-ng运行时。它在独立内部线程上运行完整的ES2023引擎,配套libuv事件循环,无需宿主侧手动驱动事件循环。该运行时实现了21个兼容WinterTC的模块,涵盖fetch、console、crypto.subtle、ReadableStream、setTimeout、fs、URL、TextEncoder等。
核心能力:
- 支持ES2023标准,启动速度快(延迟初始化WAMR后启动耗时中位数约4.82ms),内存占用低
- libuv原生执行模型:qzjs自持内部线程与libuv事件循环,宿主应用无需直接操作JS运行时
- 基于mbedTLS实现流式HTTP/TLS传输,支持分块传输解码与证书校验
- 内置原生扩展能力,覆盖压缩(miniz)、加密(mbedTLS)、文本编解码(UTF-8/Base64)、WebAssembly(默认采用WAMR,可切换为wasm3)
- 支持多上下文执行,可将上下文软挂起并持久化到磁盘后恢复;Web Workers可作为真实并行线程或隔离进程运行(自多进程M-P2里程碑版本起默认采用进程隔离模式)
- 提供线程安全的宿主与运行时双向消息传递能力,C侧通过JSON接口(qz_post_message / message_cb)交互,JS侧对应postMessage/onmessage接口
- 提供独立CLI可执行文件,可直接运行基于WinterTC Web API的脚本(不兼容Node.js API)
- 库内置DAP分步调试器,可通过编译选项-DQZ_BUILD_DEBUGGER=ON启用
- 配套完善的测试体系,采用GoogleTest框架,通过mock_libuv实现确定性离线测试,测试用例按类别标记(离线、网络、基准测试、test262)
构建系统采用CMake,提供可选扩展的功能开关(QZ_WITH_*)、构建配置(精简/标准),以及测试、示例、调试器对应的构建目标。所有依赖(QuickJS-ng、libuv、mbedTLS、miniz、WAMR、wasm3)均以git子模块形式托管,严格遵循C99标准从源码编译。重写polyfill时会用到npm开发依赖(esbuild、urlpattern-polyfill、@ungap/structured-clone、web-streams-polyfill),但这些依赖不会被打包进最终二进制文件。
架构说明:宿主应用通过线程安全的JSON消息机制与qz_t运行时交互。运行时在独立线程上运行,配套libuv事件循环、JSContext实例与I/O桥接层。默认配置下(QZ_PROCESS_MODEL=ISOLATED),宿主与运行时为相互独立的进程,通过socketpair传输以FlatBuffers为帧格式的消息信封,实现崩溃隔离。项目采用MIT许可证。
评论
0 评分人数达到10人后显示
登录后参与讨论。