Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

WebAssembly.Module

Baseline
Weitgehend verfügbar
*

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Oktober 2017 browserübergreifend verfügbar.

* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.

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

WebAssembly.Module ist in Umgebungen, die AbstractModuleSource unterstützen, eine Unterklasse der versteckten Klasse AbstractModuleSource.

Hinweis: Das WebAssembly.Module-Objekt steht in keinem Zusammenhang mit dem Module-Objekt, das in Emscripten verwendet wird.

Konstruktor

WebAssembly.Module()

Erstellt ein neues Module-Objekt.

Statische Methoden

WebAssembly.Module.customSections()

Gibt bei Angabe eines Module und einer Zeichenkette eine Kopie der Inhalte aller benutzerdefinierten Abschnitte im Modul mit dem angegebenen Zeichenkettennamen zurück.

WebAssembly.Module.exports()

Gibt bei Angabe eines Module ein Array zurück, das Beschreibungen aller deklarierten Exporte enthält.

WebAssembly.Module.imports()

Gibt bei Angabe eines Module ein Array zurück, das Beschreibungen aller deklarierten Importe enthält.

Beispiele

Ein kompiliertes Modul an einen Worker senden

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

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

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 kann. Anschließend richtet die Funktion einen Event-Handler ein, um das Modul vom Hauptthread zu empfangen. Wenn das Modul empfangen wird, erstellen wir mithilfe der Methode WebAssembly.instantiate() eine Instanz daraus und rufen eine darin exportierte Funktion 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();
  });
};

Das Modul mit import source abrufen

In Umgebungen, die Quellphasenimporte unterstützen, können Sie mit der Anweisung import source oder dem Operator import.source() ein WebAssembly.Module-Objekt abrufen. Beide vermeiden die Notwendigkeit, fetch() oder WebAssembly.compileStreaming() aufzurufen, und verwenden stattdessen die standardmäßige Modullader-Infrastruktur.

js
import source modSource from "./simple.wasm";

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

Spezifikationen

Spezifikation
WebAssembly JavaScript Interface
# modules

Browser-Kompatibilität

Siehe auch