WebAssembly

Baseline 廣泛可用 *

此功能已非常成熟,可在多種裝置和瀏覽器版本上使用。自 2017 年 10 月以來,它已在各大瀏覽器中可用。

* 此特性的某些部分可能存在不同級別的支援。

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

與大多數其他全域性物件不同,WebAssembly 不是一個建構函式(它不是一個函式物件)。你可以將其與 Math 進行比較,Math 也是數學常量和函式的名稱空間物件,或者與 Intl 進行比較,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 程式碼,可以高效地 與 Workers 共享,並可以多次例項化。

WebAssembly.RuntimeError

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

WebAssembly.Table

一個類陣列結構,代表 WebAssembly 表,用於儲存 引用,例如函式引用。

WebAssembly.Tag

表示 WebAssembly 異常型別的物件。

WebAssembly.Exception

一個 WebAssembly 異常物件,可以在 WebAssembly/JavaScript 邊界內外丟擲、捕獲和重新丟擲。

靜態方法

WebAssembly.compile()

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

WebAssembly.compileStreaming()

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

WebAssembly.instantiate()

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

WebAssembly.instantiateStreaming()

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

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

瀏覽器相容性

另見