WebAssembly.instantiateStreaming()
Baseline 廣泛可用 *
WebAssembly.instantiateStreaming() 靜態方法直接從流式底層源編譯並例項化一個 WebAssembly 模組。這是載入 Wasm 程式碼最高效、最最佳化方式。
注意: 具有嚴格 Content Security Policy (CSP) 的網頁可能會阻止 WebAssembly 編譯和執行模組。有關允許 WebAssembly 編譯和執行的更多資訊,請參閱 script-src CSP。
語法
WebAssembly.instantiateStreaming(source)
WebAssembly.instantiateStreaming(source, importObject)
WebAssembly.instantiateStreaming(source, importObject, compileOptions)
引數
source-
一個
Response物件或一個將解析為該物件的 Promise,代表您想要流式傳輸、編譯和例項化的 Wasm 模組的底層源。 importObject可選-
一個包含將匯入到新建立的
Instance中的值的物件,例如函式或WebAssembly.Memory物件。編譯後的模組的每個宣告的匯入都必須有一個匹配的屬性,否則將丟擲WebAssembly.LinkError。 compileOptions可選-
一個包含編譯選項的物件。屬性可以包括:
builtins可選-
一個字串陣列,用於啟用在已編譯的 Wasm 模組中使用 JavaScript 內建函式。這些字串定義了您要啟用的內建函式。目前唯一可用的值是
"js-string",它啟用 JavaScript 字串內建函式。 importedStringConstants可選-
一個字串,指定 匯入的全域性字串常量 的名稱空間。如果您希望在 Wasm 模組中使用匯入的全域性字串常量,則需要指定此屬性。
返回值
一個 Promise,它解析為一個 ResultObject,該物件包含兩個欄位:
module: 一個WebAssembly.Module物件,代表已編譯的 WebAssembly 模組。此Module可以再次例項化或透過 postMessage() 共享。instance: 一個WebAssembly.Instance物件,其中包含所有 匯出的 WebAssembly 函式。
異常
- 如果任一引數的型別或結構不正確,則會丟擲
TypeError。 - 如果操作失敗,Promise 將以
WebAssembly.CompileError、WebAssembly.LinkError或WebAssembly.RuntimeError拒絕,具體取決於失敗的原因。
示例
例項化流式傳輸
以下示例(請參閱 GitHub 上的 instantiate-streaming.html 演示,並 線上檢視)直接從底層源流式傳輸 Wasm 模組,然後進行編譯和例項化,Promise 將解析為 ResultObject。因為 instantiateStreaming() 函式接受一個 Response 物件的 Promise,所以您可以直接將其傳遞給 fetch() 呼叫,它會在 Promise fulfilled 時將響應傳遞給該函式。
const importObject = {
my_namespace: { imported_func: (arg) => console.log(arg) },
};
WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
然後訪問 ResultObject 的 instance 成員,並呼叫其中包含的匯出函式。
注意: 要使此功能正常工作,伺服器應以 application/wasm MIME 型別返回 .wasm 檔案。
啟用 JavaScript 內建函式和全域性字串匯入
此示例在使用 instantiateStreaming() 編譯和例項化 Wasm 模組時,啟用了 JavaScript 字串內建函式和匯入的全域性字串常量,然後再執行匯出的 main() 函式(該函式將 "hello world!" 列印到控制檯)。線上檢視執行效果。
const importObject = {
// Regular import
m: {
log: console.log,
},
};
const compileOptions = {
builtins: ["js-string"], // Enable JavaScript string builtins
importedStringConstants: "string_constants", // Enable imported global string constants
};
WebAssembly.instantiateStreaming(
fetch("log-concat.wasm"),
importObject,
compileOptions,
).then((result) => result.instance.exports.main());
規範
| 規範 |
|---|
| WebAssembly Web API # dom-webassembly-instantiatestreaming |
瀏覽器相容性
載入中…