WebAssembly.instantiateStreaming()

**WebAssembly.instantiateStreaming()** 靜態方法直接從流式傳輸的底層原始碼編譯和例項化 WebAssembly 模組。這是載入 Wasm 程式碼最有效、最最佳化的方式。

**注意:** 具有嚴格內容安全策略 (CSP) 的網頁可能會阻止 WebAssembly 編譯和執行模組。有關允許 WebAssembly 編譯和執行的更多資訊,請參閱script-src CSP

語法

js
WebAssembly.instantiateStreaming(source, importObject)

引數

source

一個Response 物件或一個將以一個物件為結果的承諾,表示要流式傳輸、編譯和例項化的 Wasm 模組的底層原始碼。

importObject 可選

一個包含要匯入到新建立的 Instance 中的值的物件,例如函式或WebAssembly.Memory 物件。每個宣告的匯入的已編譯模組都必須有一個匹配的屬性,否則將丟擲WebAssembly.LinkError

返回值

一個Promise,它解析為一個ResultObject,其中包含兩個欄位

異常

示例

例項化流式傳輸

以下示例(請參閱我們在 GitHub 上的instantiate-streaming.html 演示,以及即時檢視它)直接從底層原始碼流式傳輸 Wasm 模組,然後對其進行編譯和例項化,承諾將以一個 ResultObject 為結果。因為 instantiateStreaming() 函式接受一個針對Response 物件的承諾,所以您可以直接將其傳遞給fetch() 呼叫,它將在承諾完成時將響應傳遞到函式中。

js
const importObject = {
  my_namespace: { imported_func: (arg) => console.log(arg) },
};

WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
  (obj) => obj.instance.exports.exported_func(),
);

然後訪問 ResultObject 的例項成員,並呼叫其中包含的匯出的函式。

**注意:** 為了使此方法起作用,.wasm 檔案應由伺服器以 application/wasm MIME 型別返回。

規範

規範
WebAssembly Web API
# dom-webassembly-instantiatestreaming

瀏覽器相容性

BCD 表格僅在瀏覽器中載入

另請參閱