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 團隊期待收到您的來源
試用意見回饋 (請參閱
說明),屆時功能出貨時,就會根據你的需求調整。
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間: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": "\u4e0a\u6b21\u66f4\u65b0\u6642\u9593\uff1a2024-03-22 (\u4e16\u754c\u6a19\u6e96\u6642\u9593)\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"]],["上次更新時間:2024-03-22 (世界標準時間)。"]]