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 dient als Namespace 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 Namespace-Objekt für mathematische Konstanten und Funktionen ist, oder mit Intl
, das ein Namespace-Objekt für Internationalisierungskonstruktoren und andere sprachsensitiv Funktionen ist.
Beschreibung
Die Hauptanwendungen des WebAssembly
-Objekts sind:
- Laden von WebAssembly-Code mit der Funktion
WebAssembly.instantiate()
. - Erstellen neuer Speicher- und Tabelleninstanzen über die Konstruktoren
WebAssembly.Memory()
/WebAssembly.Table()
. - Bereitstellung von Einrichtungen zur Behandlung von Fehlern, die in WebAssembly auftreten, über die Konstruktoren
WebAssembly.CompileError()
/WebAssembly.LinkError()
/WebAssembly.RuntimeError()
.
Schnittstellen
WebAssembly.CompileError
-
Zeigt einen Fehler beim Dekodieren oder Validieren von WebAssembly an.
WebAssembly.Global
-
Repräsentiert eine globale Variableninstanz, die sowohl von JavaScript zugänglich als auch über ein oder mehrere
WebAssembly.Module
Instanzen importierbar/exportierbar ist. Dies ermöglicht die dynamische Verknüpfung mehrerer Module. WebAssembly.Instance
-
Ist eine zustandsbehaftete, ausführbare Instanz eines
WebAssembly.Module
. WebAssembly.LinkError
-
Zeigt einen Fehler bei der Modulinstanziierung an (außer Traps von der Startfunktion).
WebAssembly.Memory
-
Ein Objekt, dessen
buffer
Eigenschaft ein veränderbarerArrayBuffer
ist, der die rohen Bytes des Speichers enthält, auf die von einer WebAssemblyInstance
zugegriffen wird. WebAssembly.Module
-
Enthält zustandslosen WebAssembly-Code, der bereits vom Browser kompiliert wurde und effizient mit Workern geteilt und mehrfach instanziiert werden kann.
WebAssembly.RuntimeError
-
Error-Typ, der geworfen wird, wenn immer WebAssembly eine Trap spezifiziert.
WebAssembly.Table
-
Eine array-ähnliche Struktur, die eine WebAssembly-Tabelle darstellt und Referenzen speichert, wie z.B. Funktionsreferenzen.
WebAssembly.Tag
-
Ein Objekt, das einen Typ von WebAssembly-Ausnahme darstellt.
WebAssembly.Exception
-
Ein WebAssembly-Ausnahmeobjekt, das sowohl innerhalb als auch über WebAssembly/JavaScript-Grenzen hinweg geworfen, gefangen und wieder geworfen werden kann.
Statische Methoden
WebAssembly.compile()
-
Kompiliert ein
WebAssembly.Module
aus WebAssembly-Binärcode, wobei die Instanziierung ein separater Schritt bleibt. WebAssembly.compileStreaming()
-
Kompiliert ein
WebAssembly.Module
direkt aus einer gestreamten zugrunde liegenden Quelle, wobei die Instanziierung ein separater Schritt bleibt. WebAssembly.instantiate()
-
Die primäre API zum Kompilieren und Instanziieren von WebAssembly-Code, bei der sowohl ein
Module
als auch seine ersteInstance
zurückgegeben werden. WebAssembly.instantiateStreaming()
-
Kompiliert und instanziiert ein WebAssembly-Modul direkt aus einer gestreamten zugrunde liegenden Quelle und gibt dabei sowohl ein
Module
als auch dessen ersteInstance
zurück. WebAssembly.validate()
-
Validiert ein gegebenes typisiertes Array von WebAssembly-Binärcode und gibt zurück, ob die Bytes gültiger WebAssembly-Code (
true
) oder nicht (false
) sind.
Beispiele
Streamen eines Wasm-Moduls, dann kompilieren und instanziieren
Das folgende Beispiel (sehen Sie sich unser instantiate-streaming.html Demo auf GitHub an und sehen Sie es live an) streamt direkt ein Wasm-Modul von einer zugrunde liegenden Quelle, kompiliert und instanziiert es dann, wobei das Versprechen mit einem ResultObject
erfüllt wird. Da die Funktion instantiateStreaming()
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.
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
- WebAssembly Übersichtsseite
- WebAssembly-Konzepte
- Verwendung der WebAssembly-JavaScript-API