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:
- 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 Handhabung von Fehlern, die in WebAssembly über die Konstruktoren
WebAssembly.CompileError()
/WebAssembly.LinkError()
/WebAssembly.RuntimeError()
auftreten.
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 skalierbarerArrayBuffer
ist, der die Rohbytes 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 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 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.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.
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 |