WebAssembly.Module

Baseline 廣泛可用 *

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

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

WebAssembly.Module 物件包含已由瀏覽器編譯的無狀態 WebAssembly 程式碼 — 這可以被 高效地與 Workers 共享,並可以例項化多次。

注意: WebAssembly.Module 物件與 Emscripten 中使用的 Module 物件無關。

建構函式

WebAssembly.Module()

建立一個新的 Module 物件。

靜態方法

WebAssembly.Module.customSections()

給定一個 Module 和字串,返回該模組中具有給定字串名稱的所有自定義節內容的副本。

WebAssembly.Module.exports()

給定一個 Module,返回一個包含所有已宣告匯出項描述的陣列。

WebAssembly.Module.imports()

給定一個 Module,返回一個包含所有已宣告匯入項描述的陣列。

示例

將編譯後的模組傳送到 worker

以下示例使用 WebAssembly.compileStreaming() 方法編譯載入的 simple.wasm 位元組碼,並使用 postMessage() 將生成的 Module 例項傳送給一個 worker

請檢視 index-compile.html原始碼即時預覽

js
const worker = new Worker("wasm_worker.js");

WebAssembly.compileStreaming(fetch("simple.wasm")).then((mod) =>
  worker.postMessage(mod),
);

Worker 函式 wasm_worker.js 定義了一個供模組使用的匯入物件。然後,該函式設定了一個事件處理程式,用於接收來自主執行緒的模組。當接收到模組時,我們使用 WebAssembly.instantiate() 方法從此模組建立一個例項,並呼叫其中一個匯出的函式。

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

onmessage = (e) => {
  console.log("module received from main thread");
  const mod = e.data;

  WebAssembly.instantiate(mod, importObject).then((instance) => {
    instance.exports.exported_func();
  });
};

規範

規範
WebAssembly JavaScript 介面
# 模組

瀏覽器相容性

另見