WebAssembly.Module()-Konstruktor

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.

* Some parts of this feature may have varying levels of support.

Ein WebAssembly.Module()-Konstruktor erstellt ein neues Modulobjekt, das zustandslosen WebAssembly-Code enthält, der bereits vom Browser kompiliert wurde und effizient mit Arbeitern geteilt und mehrfach instanziiert werden kann.

Die WebAssembly.Module()-Konstruktorfunktion kann aufgerufen werden, um den gegebenen WebAssembly-Binärcode synchron zu kompilieren. Der primäre Weg, ein Module zu erhalten, ist jedoch durch eine asynchrone Kompilierungsfunktion wie WebAssembly.compile().

Hinweis: Webseiten, die eine strikte Richtlinie zur Inhaltsicherheit (CSP) haben, könnten die Kompilierung und Ausführung von WebAssembly-Modulen blockieren. Weitere Informationen zur Erlaubnis der Kompilierung und Ausführung von WebAssembly finden Sie unter script-src CSP.

Syntax

Warnung: Da die Kompilierung großer Module kostspielig sein kann, sollten Entwickler den Module()-Konstruktor nur verwenden, wenn eine synchrone Kompilierung absolut erforderlich ist; die asynchrone Methode WebAssembly.compileStreaming() sollte zu allen anderen Zeiten verwendet werden.

js
new WebAssembly.Module(bufferSource)
new WebAssembly.Module(bufferSource, compileOptions)

Parameter

bufferSource

Ein typisiertes Array oder ArrayBuffer, das den Binärcode des zu kompilierenden Wasm-Moduls enthält.

compileOptions Optional

Ein Objekt, das Kompilierungsoptionen enthält. Eigenschaften können beinhalten:

builtins Optional

Ein Array von Zeichenfolgen, das die Verwendung von JavaScript-Builtins im kompilierten Wasm-Modul ermöglicht. Die Zeichenfolgen definieren die Builtins, die Sie aktivieren möchten. Derzeit ist der einzige verfügbare Wert "js-string", der JavaScript-String-Builtins aktiviert.

importedStringConstants Optional

Eine Zeichenfolge, die einen Namensraum für importierte globale Zeichenfolgenkonstanten angibt. Diese Eigenschaft muss angegeben werden, wenn Sie importierte globale Zeichenfolgenkonstanten im Wasm-Modul verwenden möchten.

Ausnahmen

  • Wenn der Parameter nicht den korrekten Typ oder die Struktur hat, wird ein TypeError ausgelöst.
  • Wenn die Kompilierung fehlschlägt, lehnt der Konstruktor mit einem WebAssembly.CompileError ab.
  • Einige Browser können einen RangeError auslösen, da sie die Kompilierung und Instanziierung von Wasm mit großen Buffern im UI-Thread verbieten.

Beispiele

Synchrone Kompilierung eines WebAssembly-Moduls

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

function createWasmModule(bytes) {
  return new WebAssembly.Module(bytes);
}

fetch("simple.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => {
    const mod = createWasmModule(bytes);
    WebAssembly.instantiate(mod, importObject).then((result) =>
      result.exports.exported_func(),
    );
  });

Aktivierung von JavaScript-Builtins und globalen String-Imports

Dieses Beispiel aktiviert JavaScript-String-Builtins und importierte globale Zeichenfolgenkonstanten beim Kompilieren eines Wasm-Moduls über den Module()-Konstruktor, das dann mit instantiate() instanziiert wird. Es ruft dann die exportierte main()-Funktion auf, die "hello world!" in die Konsole protokolliert. Sehen Sie es live im Einsatz.

js
const importObject = {
  // Regular import
  m: {
    log: console.log,
  },
};

const compileOptions = {
  builtins: ["js-string"], // Enable JavaScript string builtins
  importedStringConstants: "string_constants", // Enable imported global string constants
};

fetch("log-concat.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => {
    const module = new WebAssembly.Module(bytes, compileOptions);
    WebAssembly.instantiate(module, importObject).then((instance) =>
      instance.exports.main(),
    );
  });

Spezifikationen

Specification
WebAssembly JavaScript Interface
# dom-module-module

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch