WebAssembly JavaScript Promise 集成 (JSPI) 进入源试用

JavaScript Promise 集成 (JSPI) 是一种 API,可让编译为 WebAssembly 的同步顺序代码访问异步 Web API。许多 Web API 都是根据 JavaScript promise 打造的:它们不会立即执行所请求的操作,而是返回一个 promise 来执行该操作。当最终执行该操作时,浏览器的任务运行程序会使用该 promise 调用任何回调。JSPI 会挂接到此架构中,以便在返回 promise 时暂停 WebAssembly 应用,并在 promise 解析时恢复该应用。

从 Chrome 123 到 Chrome 128,JSPI 以源试用形式提供。 如需详细了解 JSPI,请参阅博文推出 WebAssembly JavaScript Promise 集成 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,请注册源试用。如果您需要相关说明,请参阅源试用入门。JSPI 团队期待收到您的源试用反馈(请参阅说明中的第 5 步),以便该功能在正式发布时能够满足您的需求!