WebAssembly

WebAssembly JavaScript 物件充當所有與 WebAssembly 相關的功能的名稱空間。

與大多數其他全域性物件不同,WebAssembly 不是建構函式(它不是函式物件)。您可以將其與 Math 進行比較,後者也是數學常數和函式的名稱空間物件,或者與 Intl 進行比較,後者是國際化建構函式和其他語言敏感函式的名稱空間物件。

描述

WebAssembly 物件的主要用途是

介面

WebAssembly.CompileError

指示 WebAssembly 解碼或驗證期間發生的錯誤。

WebAssembly.Global

表示全域性變數例項,可從 JavaScript 訪問,並且可在多個 WebAssembly.Module 例項之間匯入/匯出。這允許多個模組的動態連結。

WebAssembly.Instance

WebAssembly.Module 的有狀態、可執行例項

WebAssembly.LinkError

指示模組例項化期間發生的錯誤(除了來自啟動函式的 陷阱)。

WebAssembly.Memory

一個物件,其 buffer 屬性是一個可調整大小的 ArrayBuffer,它儲存由 WebAssembly Instance 訪問的原始記憶體位元組。

WebAssembly.Module

包含已由瀏覽器編譯的無狀態 WebAssembly 程式碼,可以有效地 與 Worker 共享,並且可以多次例項化。

WebAssembly.RuntimeError

每當 WebAssembly 指定 陷阱 時丟擲的錯誤型別。

WebAssembly.Table

表示 WebAssembly 表的類似陣列的結構,該結構儲存 引用,例如函式引用。

WebAssembly.Tag

表示 WebAssembly 異常型別的物件。

WebAssembly.Exception

可以丟擲、捕獲和重新丟擲的 WebAssembly 異常物件,無論是在 WebAssembly/JavaScript 邊界內還是跨邊界。

靜態方法

WebAssembly.instantiate()

編譯和例項化 WebAssembly 程式碼的主要 API,返回 Module 及其第一個 Instance

WebAssembly.instantiateStreaming()

直接從流式底層源編譯和例項化 WebAssembly 模組,返回 Module 及其第一個 Instance

WebAssembly.compile()

從 WebAssembly 二進位制程式碼編譯 WebAssembly.Module,將例項化作為單獨的步驟。

WebAssembly.compileStreaming()

直接從流式底層源編譯 WebAssembly.Module,將例項化作為單獨的步驟。

WebAssembly.validate()

驗證給定的 WebAssembly 二進位制程式碼的型別化陣列,返回位元組是否為有效的 WebAssembly 程式碼 (true) 或不是 (false)。

示例

流式傳輸 Wasm 模組,然後編譯並例項化它

以下示例(請參閱我們在 GitHub 上的 instantiate-streaming.html 演示,以及 線上檢視)直接從底層源流式傳輸 Wasm 模組,然後編譯並例項化它,promise 以 ResultObject 形式完成。由於 instantiateStreaming() 函式接受 Response 物件的 promise,因此您可以直接將 fetch() 呼叫傳遞給它,它將在 promise 完成時將響應傳遞到函式中。

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.instance 屬性,並呼叫包含的匯出函式。

規範

規範
WebAssembly JavaScript 介面
# webassembly-namespace

瀏覽器相容性

BCD 表僅在啟用 JavaScript 的瀏覽器中載入。

另請參閱