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 WebAssembly
JavaScript-Objekt fungiert als Namensraum für alle mit WebAssembly verbundenen Funktionalitäten.
Im Gegensatz zu den meisten anderen globalen Objekten ist WebAssembly
kein Konstruktor (es ist kein Funktionsobjekt). Sie können es mit Math
vergleichen, welches 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 Hauptverwendungen des WebAssembly
-Objekts sind:
- Laden von WebAssembly-Code, mithilfe der Funktion
WebAssembly.instantiate()
. - Erstellen neuer Speicher- und Tabellinstanzen über die Konstruktoren
WebAssembly.Memory()
/WebAssembly.Table()
. - Bereitstellen von Einrichtungen zur Behandlung von in WebAssembly auftretenden Fehlern über die Konstruktoren
WebAssembly.CompileError()
/WebAssembly.LinkError()
/WebAssembly.RuntimeError()
.
Schnittstellen
WebAssembly.CompileError
-
Zeigt einen Fehler während des Dekodierens oder der Validierung von WebAssembly an.
WebAssembly.Global
-
Stellt eine globale Variableninstanz dar, die sowohl von JavaScript aus zugänglich als auch innerhalb eines oder mehrerer
WebAssembly.Module
-Instanzen importierbar/exportierbar ist. Dies ermöglicht eine dynamische Verknüpfung mehrerer Module. WebAssembly.Instance
-
Ist eine zustandsbehaftete, ausführbare Instanz eines
WebAssembly.Module
. WebAssembly.LinkError
-
Zeigt einen Fehler während der Modulerstellung an (außer Traps aus der Startfunktion).
WebAssembly.Memory
-
Ein Objekt, dessen
buffer
-Eigenschaft ein anpassbaresArrayBuffer
ist, das die Rohbytes des Speichers hält, auf den eine WebAssembly-Instance
zugreift. WebAssembly.Module
-
Enthält zustandslosen WebAssembly-Code, der bereits vom Browser kompiliert wurde und effizient mit Workers geteilt und mehrfach instanziiert werden kann.
WebAssembly.RuntimeError
-
Fehlertyp, der ausgelöst wird, wenn immer WebAssembly eine Trap spezifiziert.
WebAssembly.Table
-
Eine arrayähnliche Struktur, die eine WebAssembly-Tabelle darstellt und Referenzen speichert, z.B. Funktionsreferenzen.
WebAssembly.Tag
-
Ein Objekt, das eine Art von WebAssembly-Ausnahme darstellt.
WebAssembly.Exception
-
Ein WebAssembly-Ausnahmeobjekt, das ausgelöst, aufgefangen und sowohl innerhalb als auch über WebAssembly/JavaScript-Grenzen 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 unterliegenden Quelle, wobei die Instanziierung als separater Schritt belassen wird. WebAssembly.instantiate()
-
Die primäre API zum 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 unterliegenden Quelle, gibt sowohl ein
Module
als auch seine ersteInstance
zurück. WebAssembly.validate()
-
Validiert ein gegebenes typisiertes Array von WebAssembly-Binärcode, wobei zurückgegeben wird, ob die Bytes gültiger WebAssembly-Code sind (
true
) oder nicht (false
).
Beispiele
Ein Wasm-Modul streamen, dann kompilieren und instanziieren
Das folgende Beispiel (sehen Sie unser instantiate-streaming.html-Demo auf GitHub an und sehen Sie es live auch) streamt direkt ein Wasm-Modul aus einer unterliegenden Quelle, dann kompiliert und instanziiert es dieses, 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 es 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 aufgerufen.
Spezifikationen
Specification |
---|
WebAssembly JavaScript Interface # webassembly-namespace |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- WebAssembly Überblicksseite
- WebAssembly-Konzepte
- Verwendung der WebAssembly-JavaScript-API