WebAssembly JavaScript Promise 統合(JSPI)のオリジン トライアルの開始

JavaScript Promise Integration(JSPI)は、WebAssembly にコンパイルされた同期シーケンシャル コードが非同期 Web API にアクセスできるようにする API です。多くの Web API は JavaScript のPromise で作成されています。リクエストされたオペレーションをすぐに実行するのではなく、Promise を返して実行します。アクションが最終的に実行されると、ブラウザのタスクランナーが Promise を使用してコールバックを呼び出します。JSPI はこのアーキテクチャにフックし Promise が返された時点で WebAssembly アプリケーションを一時停止できるようにしました。 Promise が解決されると再開されます。

Chrome 123 から Chrome 128 まで JSPI はオリジン トライアルとして利用できます。 JSPI の詳細については、WebAssembly JavaScript Promise Integration API のご紹介のブログ投稿または仕様ドラフトをご覧ください。

この機能の使用方法について詳しくは、 コードをアウトソーシングしてフィボナッチ数列を計算する C プログラムの抜粋です。 追加することもできます

// This is C code.
long promiseFib(long x) {
  if (x == 0)
    return 0;
  if (x == 1)
    return 1;
  // This is where the C code calls asynchronous JavaScript.
  return promiseAdd(promiseFib(x - 1), promiseFib(x - 2));
}

// Addition artificially wrapped in a Promise.
EM_ASYNC_JS(long, promiseAdd, (long x, long y), {
  // This is asynchronous JavaScript code.
  return Promise.resolve(x+y);
});

この C プログラムを WebAssembly にコンパイルするには、次のコマンドを使用します。これには Emscripten SDK が必要です。

emcc -O3 badfib.c -o index.html -s ASYNCIFY=2

次のように、JavaScript から JSPI サポートの機能を検出できます。

if ('Suspender' in WebAssembly) {
  // JSPI is supported.
}

先ほどのコードサンプルからの JSPI のデモは、 Glitch で入手できます。また、 できます。Emscripten によって生成された ソースコード 興味深いコードですが、興味深いのは 元の C プログラム (このリンクをクリックすると、コードがダウンロードされます)。

アプリケーションの実際のユーザーで JSPI を試すには、 オリジン トライアルに登録します。 次の場合は、オリジン トライアルのスタートガイドをご覧ください。 指示が必要です。JSPI チームがオリジンをお送りすることを楽しみにしています ステップ 5 を 機能のリリース時にニーズに合ったものが表示されます。