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.
Das JavaScript-Objekt WebAssembly
fungiert als Namensraum für alle mit WebAssembly verbundenen Funktionen.
Im Gegensatz zu den meisten anderen globalen Objekten 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
, das das Namensraumobjekt für Internationalisierungs-Konstruktoren und andere sprachsensible Funktionen ist.
Beschreibung
Die Hauptanwendungsbereiche für das WebAssembly
-Objekt sind:
- Laden von WebAssembly-Code mit der Funktion
WebAssembly.instantiate()
. - Erstellen neuer Speicher- und Tabelleneinheiten über die Konstruktoren
WebAssembly.Memory()
/WebAssembly.Table()
. - Bereitstellung von Möglichkeiten zur Behandlung von Fehlern, die in WebAssembly auftreten, über die Konstruktoren
WebAssembly.CompileError()
/WebAssembly.LinkError()
/WebAssembly.RuntimeError()
.
Schnittstellen
WebAssembly.CompileError
-
Zeigt einen Fehler während der WebAssembly-Dekodierung oder -Validierung an.
WebAssembly.Global
-
Repräsentiert eine globale Variableninstanz, die sowohl von JavaScript aus zugänglich als auch importierbar/exportierbar über ein oder mehrere Instanzen von
WebAssembly.Module
ist. Dies ermöglicht das dynamische Verknüpfen mehrerer Module. WebAssembly.Instance
-
Ist eine zustandsbehaftete, ausführbare Instanz eines
WebAssembly.Module
. WebAssembly.LinkError
-
Zeigt einen Fehler während der Modul-Initialisierung an (außer Traps von der Startfunktion).
WebAssembly.Memory
-
Ein Objekt, dessen
buffer
-Eigenschaft ein skalierbarerArrayBuffer
ist, der die rohen Bytes des Speichers hält, auf die eine WebAssemblyInstance
zugreift. WebAssembly.Module
-
Enthält zustandslosen WebAssembly-Code, der bereits vom Browser kompiliert wurde und effizient mit Arbeitern geteilt und mehrfach instanziiert werden kann.
WebAssembly.RuntimeError
-
Fehlerart, die immer dann ausgelöst wird, wenn WebAssembly eine Trap spezifiziert.
WebAssembly.Table
-
Eine arrayähnliche Struktur, die eine WebAssembly-Tabelle repräsentiert, welche Referenzen speichert, wie z.B. Funktionsreferenzen.
WebAssembly.Tag
-
Ein Objekt, das eine Art von WebAssembly-Ausnahme darstellt.
WebAssembly.Exception
-
Ein WebAssembly-Ausnahmeobjekt, das sowohl innerhalb als auch über WebAssembly/JavaScript-Grenzen hinweg geworfen, gefangen und erneut geworfen werden kann.
Statische Methoden
WebAssembly.instantiate()
-
Die primäre API für das Kompilieren und Instanziieren von WebAssembly-Code, die sowohl ein
Module
als auch seine ersteInstance
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 ersteInstance
zurück. WebAssembly.compile()
-
Kompiliert ein
WebAssembly.Module
aus WebAssembly-Binärcode und lässt die Instanziierung als separaten Schritt. WebAssembly.compileStreaming()
-
Kompiliert ein
WebAssembly.Module
direkt aus einer gestreamten zugrunde liegenden Quelle und lässt die Instanziierung als separaten Schritt. WebAssembly.validate()
-
Validiert ein gegebenes typisiertes Array von WebAssembly-Binärcode und gibt zurück, ob die Bytes gültiger WebAssembly-Code sind (
true
) oder nicht (false
).
Beispiele
Ein Wasm-Modul streamen, kompilieren und instanziieren
Das folgende Beispiel (siehe unser instantiate-streaming.html Demo auf GitHub, und sehen Sie es live ebenfalls) streamt direkt ein Wasm-Modul aus einer zugrunde liegenden Quelle, kompiliert und instanziiert es und erfüllt das Versprechen mit einem ResultObject
. Da die Funktion instantiateStreaming()
ein Versprechen für ein Response
-Objekt akzeptiert, können Sie direkt einen fetch()
-Aufruf übergeben, und sie wird die Antwort in die Funktion übergeben, wenn das Versprechen erfüllt wird.
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 aufgerufen und die enthaltene exportierte Funktion wird aufgerufen.
Spezifikationen
Specification |
---|
WebAssembly JavaScript Interface # webassembly-namespace |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- WebAssembly Übersichtsseite
- WebAssembly-Konzepte
- Verwendung der WebAssembly JavaScript-API