WebAssembly JavaScript Promise Integration (JSPI) 進入來源試用

JavaScript Promise Integration (JSPI) 是一種可以同步的 API 編譯至 WebAssembly 的循序程式碼,以存取非同步 Web API。許多 Web API 都是以 JavaScript promise 編寫:這些 API 不會立即執行要求的作業,而是會傳回 promise 來執行作業。當作業最終執行時,瀏覽器的工作執行緒會使用 promise 叫用任何回呼。JSPI 會連結至這個架構,在傳回應許時暫停 WebAssembly 應用程式,並在解析應許時恢復。

在 Chrome 123 至 Chrome 128 版本之間, JSPI 提供來源試用服務。 如要進一步瞭解 JSPI,請參閱這篇網誌文章 隆重推出 WebAssembly JavaScript Promise Integration API 或從 規格草稿

如要進一步瞭解這項功能的用法,請考量下列幾點: 這是 C 程式的摘錄片段,這類程式會將 除了 JavaScript 函式之外

// 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 追蹤。您會看到 原始碼 實際上 有趣的程式碼是 原始 C 計畫 (按一下這個連結即可下載程式碼)。

如要讓應用程式的實際使用者試用 JSPI,請註冊原始版本的試用方案。如果您願意,請參閱「開始使用來源試用」一文 以取得指示。JSPI 團隊期待收到您的來源 試用意見回饋 (請參閱 說明),屆時功能出貨時,就會根據你的需求調整。