WebAssembly.Module

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.

Ein WebAssembly.Module-Objekt enthält zustandslosen WebAssembly-Code, der bereits vom Browser kompiliert wurde — dieser kann effizient mit Arbeitern geteilt werden und mehrfach instanziiert werden.

Hinweis: Das WebAssembly.Module-Objekt ist nicht mit dem Module-Objekt in Emscripten verwandt.

Konstruktor

WebAssembly.Module()

Erstellt ein neues Module-Objekt.

Statische Methoden

WebAssembly.Module.customSections()

Gibt, basierend auf einem Module und einem String, eine Kopie der Inhalte aller benutzerdefinierten Abschnitte im Modul mit dem angegebenen Stringnamen zurück.

WebAssembly.Module.exports()

Gibt, basierend auf einem Module, ein Array mit Beschreibungen aller deklarierten Exporte zurück.

WebAssembly.Module.imports()

Gibt, basierend auf einem Module, ein Array mit Beschreibungen aller deklarierten Importe zurück.

Beispiele

Senden eines kompilierten Moduls an einen Worker

Das folgende Beispiel kompiliert den geladenen simple.wasm-Bytecode mit der Methode WebAssembly.compileStreaming() und sendet die resultierende Module-Instanz mithilfe von postMessage() an einen Worker.

Siehe den index-compile.html Quellcode oder sehen Sie ihn live.

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

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

Die Worker-Funktion wasm_worker.js definiert ein Importobjekt, das das Modul verwenden soll. Die Funktion richtet dann einen Ereignishandler ein, um das Modul aus dem Haupt-Thread zu erhalten. Wenn das Modul empfangen wird, erstellen wir eine Instanz daraus mit der Methode WebAssembly.instantiate() und rufen eine exportierte Funktion darin auf.

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();
  });
};

Spezifikationen

Specification
WebAssembly JavaScript Interface
# modules

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch