WebAssembly

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.

Das WebAssembly JavaScript-Objekt fungiert als Namensraum für alle mit WebAssembly verbundenen Funktionen.

Anders als die meisten anderen globalen Objekte ist WebAssembly kein Konstruktor (es ist kein Funktionsobjekt). Sie können es mit Math vergleichen, das ebenfalls ein Namensraumobjekt für mathematische Konstanten und Funktionen ist, oder mit Intl, welches das Namensraumobjekt für Internationalisierungskonstruktoren und andere sprachsensitive Funktionen ist.

Beschreibung

Die Hauptanwendungen des WebAssembly-Objekts sind:

Schnittstellen

WebAssembly.CompileError

Weist auf einen Fehler bei der WebAssembly-Dekodierung oder -Validierung hin.

WebAssembly.Global

Stellt eine globale Variableninstanz dar, die sowohl von JavaScript aus zugänglich ist als auch über eine oder mehrere WebAssembly.Module-Instanzen importiert/exportiert werden kann. Dies ermöglicht das dynamische Verlinken mehrerer Module.

WebAssembly.Instance

Ist eine zustandsbehaftete, ausführbare Instanz eines WebAssembly.Module.

WebAssembly.LinkError

Weist auf einen Fehler bei der Modulinstanziierung hin (abgesehen von Traps aus der Startfunktion).

WebAssembly.Memory

Ein Objekt, dessen buffer-Eigenschaft ein skalierbarer ArrayBuffer ist, der die Rohbytes des Speichers enthält, auf die von einer WebAssembly Instance zugegriffen wird.

WebAssembly.Module

Enthält zustandslosen WebAssembly-Code, der bereits vom Browser kompiliert wurde und effizient mit Arbeitern geteilt werden kann und mehrfach instanziiert werden kann.

WebAssembly.RuntimeError

Fehlertyp, der immer dann ausgelöst wird, wenn WebAssembly eine Trap angibt.

WebAssembly.Table

Eine arrayähnliche Struktur, die eine WebAssembly-Tabelle darstellt, die Referenzen wie Funktionsreferenzen speichert.

WebAssembly.Tag

Ein Objekt, das einen Typ einer WebAssembly-Ausnahme darstellt.

WebAssembly.Exception

Ein WebAssembly-Ausnahmeobjekt, das geworfen, gefangen und sowohl innerhalb als auch über die Grenzen von WebAssembly/JavaScript hinweg erneut geworfen werden kann.

Statische Methoden

WebAssembly.compile()

Kompiliert ein WebAssembly.Module aus WebAssembly-Binärcode, wobei die Instanziierung als separater Schritt belassen wird.

WebAssembly.compileStreaming()

Kompiliert ein WebAssembly.Module direkt aus einer gestreamten zugrunde liegenden Quelle, wobei die Instanziierung als separater Schritt belassen wird.

WebAssembly.instantiate()

Die primäre API zum Kompilieren und Instanzieren von WebAssembly-Code, die sowohl ein Module als auch seine erste Instance zurückgibt.

WebAssembly.instantiateStreaming()

Kompiliert und instanziiert ein WebAssembly-Modul direkt aus einer gestreamten zugrunde liegenden Quelle und gibt sowohl ein Module als auch seine erste Instance zurück.

WebAssembly.validate()

Validiert ein gegebenes typisiertes Array aus WebAssembly-Binärcode und gibt zurück, ob die Bytes gültiger WebAssembly-Code (true) sind oder nicht (false).

Beispiele

Ein Wasm-Modul streamen, dann kompilieren und instanziieren

Das folgende Beispiel (siehe unser instantiate-streaming.html Demo auf GitHub und sehen Sie es live auch) streamt direkt ein Wasm-Modul aus einer zugrunde liegenden Quelle, kompiliert und instanziiert es dann, wobei das Versprechen mit einem ResultObject erfüllt wird. Da die instantiateStreaming()-Funktion ein Versprechen für ein Response Objekt akzeptiert, können Sie ihr direkt einen fetch() Aufruf übergeben, und es wird die Antwort in die Funktion übergeben, wenn sie erfüllt wird.

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

WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
  (obj) => obj.instance.exports.exported_func(),
);

Die .instance-Eigenschaft des ResultObject wird dann abgerufen und die darin enthaltene exportierte Funktion aufgerufen.

Spezifikationen

Specification
WebAssembly JavaScript Interface
# webassembly-namespace

Browser-Kompatibilität

Siehe auch