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 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 上提供,并且也嵌入了
关注。您可以看到由 Emscripten 生成的
源代码
但真正有趣的代码是
原始 C 程序
(点击此链接即可下载代码)。
要面向应用的真实用户试用 JSPI,
注册参加源试用。
如果您符合以下情况,请参阅开始试用
需要说明。JSPI 团队期待收到您的源
试用反馈(请参阅
说明),确保该功能在推出后能满足您的需求!
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-03-22。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"内容需要更新"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻译问题"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/代码问题"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"易于理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"解决了我的问题"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u6700\u540e\u66f4\u65b0\u65f6\u95f4 (UTC)\uff1a2024-03-22\u3002"}
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2024-03-22。"],[],[]]