このプロジェクトについて
qzjsは、Cアプリケーション向けにPlatform Abstraction Layer (PAL) を備えた埋め込み型のQuickJS-ngランタイムを提供します。このランタイムは、独自の内部スレッドでlibuvイベントループを使用してES2023完全対応のエンジンを実行し、ホスト側のイベントループポンピングを不要にします。実装されているWinterTC互換モジュールは21種類に及び、fetch、console、crypto.subtle、ReadableStream、setTimeout、fs、URL、TextEncoderなどが含まれます。
主な機能:
- ES2023対応、高速起動(遅延WAMR初期化後で約4.82msの平均)および低メモリ使用量を実現
- libuvネイティブ実行:qzjsは内部スレッドとlibuvループを所有し、ホストはJavaScriptに直接アクセスしない
- mbedTLSを使用したストリーミングHTTP/TLS、チャンク転送デコード、証明書検証をサポート
- 圧縮(miniz)、暗号化(mbedTLS)、テキストコーデック(UTF-8/Base64)、WebAssembly(WAMRデフォルト、wasm3代替)のネイティブ拡張機能を提供
- ディスクへのソフトサスペンド/レジュームを伴うマルチコンテキスト実行;Web Workersはリアルな並列スレッドまたは分離されたプロセスとして実行されます(マルチプロセスM-P2マイルストーン以降がデフォルト)
- JSON(qz_post_message / message_cb)およびJavaScript側のpostMessage/onmessageを介した、スレッドセーフなホスト↔ランタイムメッセージングを実現
- WinterTC Web APIを直接実行するためのスタンドアロンCLI実行可能ファイル(Node.js API不要)を提供
- ライブラリに組み込まれたDAPステップデバッガ(-DQZ_BUILD_DEBUGGER=ONで有効化)を搭載
- GoogleTest、決定論的オフライン用mock_libuv、およびラベル付きテストカテゴリ(オフライン、ネットワーク、ベンチマーク、test262)を備えた包括的なテストスイートを完備
ビルドシステムはCMakeを使用し、オプションの拡張機能用の機能トグル(QZ_WITH_*)、ビルドプロファイル(最小/標準)、テスト、例、デバッガ用のターゲットを備えています。すべての依存関係(QuickJS-ng、libuv、mbedTLS、miniz、WAMR、wasm3)は、厳格なC99でソースからビルドされ、gitサブモジュールとして配置されます。ポリフィル再ビルドにはnpm devDependencies(esbuild、urlpattern-polyfill、@ungap/structured-clone、web-streams-polyfill)が使用されますが、これらはバイナリには含まれません。
アーキテクチャ:ホストアプリケーションは、スレッドセーフなJSONメッセージングを介してqz_tランタイムと通信します。ランタイムは、独自のスレッドでlibuvループ、JSContext、およびI/Oブリッジを実行します。デフォルト(QZ_PROCESS_MODEL=ISOLATED)では、ホストとランタイムは別のプロセスで、クラッシュ分離のためにソケットペアを介してFlatBuffersフレーム付きのエンべロープで通信します。ライセンスはMITです。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.