WebAssembly
Baseline
Weitgehend verfügbar
*
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Oktober 2017 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Das WebAssembly JavaScript Objekt 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 sprachsensitive Funktionen ist.
Beschreibung
Die Hauptverwendungen für das WebAssembly-Objekt sind:
- Laden von WebAssembly-Code mit der Funktion
WebAssembly.instantiate(). - Erstellen neuer Speicher- und Tabelleninstanzen über die Konstruktoren
WebAssembly.Memory()/WebAssembly.Table(). - Bereitstellung von Funktionen zur Behandlung von Fehlern, die in WebAssembly auftreten, über die Konstruktoren
WebAssembly.CompileError()/WebAssembly.LinkError()/WebAssembly.RuntimeError().
Schnittstellen
WebAssembly.CompileError-
Gibt einen Fehler beim Dekodieren oder Validieren von WebAssembly an.
WebAssembly.Global-
Repräsentiert eine globale Variableninstanz, 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 Verknüpfen mehrerer Module. WebAssembly.Instance-
Ist eine zustandsbehaftete, ausführbare Instanz eines
WebAssembly.Module. WebAssembly.LinkError-
Gibt einen Fehler während der Modulinstanziierung an (außer traps aus der Startfunktion).
WebAssembly.Memory-
Ein Objekt, dessen
buffer-Eigenschaft ein anpassbaresArrayBufferist, der die rohen Bytes des Speichers hält, auf die eine WebAssembly-Instancezugreift. 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 immer dann ausgelöst wird, wenn WebAssembly eine trap angibt.
WebAssembly.Suspending-
Repräsentiert eine aussetzende Funktion — eine asynchrone (
Promise-basierte) JavaScript-Funktion, die, wenn sie in ein Wasm-Modul importiert und von innen aufgerufen wird, dazu führt, dass die Ausführung ausgesetzt wird, bis das Versprechen erfüllt ist. WebAssembly.Table-
Eine array-ähnliche Struktur, die eine WebAssembly-Tabelle repräsentiert und Referenzen, wie z.B. Funktionsreferenzen, speichert.
WebAssembly.Tag-
Ein Objekt, das eine Art von WebAssembly-Ausnahme darstellt.
WebAssembly.Exception-
Ein WebAssembly-Ausnahmeobjekt, das innerhalb und über WebAssembly/JavaScript-Grenzen hinweg geworfen, gefangen und erneut geworfen werden kann.
Statische Eigenschaften
WebAssembly.JSTag-
Ein eingebauter
WebAssembly.Tag, der Ausnahmen darstellt, die im JavaScript-Host ausgelöst werden — damit können Ausnahmen, die in JavaScript ausgelöst werden, von innen in einem Wasm-Modul behandelt werden.
Statische Methoden
WebAssembly.compile()-
Kompiliert ein
WebAssembly.Moduleaus WebAssembly-Binärcode, wobei die Instanziierung ein separater Schritt bleibt. WebAssembly.compileStreaming()-
Kompiliert ein
WebAssembly.Moduledirekt aus einem gestreamten zugrundeliegenden Quellcode und lässt die Instanziierung als separaten Schritt. WebAssembly.instantiate()-
Die primäre API zum Kompilieren und Instanziieren von WebAssembly-Code, die sowohl ein
Moduleals auch dessen ersteInstancezurückgibt. WebAssembly.instantiateStreaming()-
Kompiliert und instanziiert ein WebAssembly-Modul direkt aus einem gestreamten zugrundeliegenden Quellcode und gibt sowohl ein
Moduleals auch dessen ersteInstancezurück. WebAssembly.promising()-
Verpackt eine exportierte Wasm-Funktion, die von einem asynchronen Vorgang abhängt (d.h. eine importierte aussetzende Funktion, die über den Konstruktor
WebAssembly.Suspending()erstellt wurde) und verwandelt sie in einPromise. 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
>Streamen eines Wasm-Moduls, 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 einem zugrundeliegenden Quellcode, kompiliert und instanziiert es und erfüllt das Versprechen mit einem ResultObject. Da die instantiateStreaming()-Funktion ein Versprechen für ein Response-Objekt akzeptiert, können Sie direkt einen fetch()-Aufruf übergeben und es wird die Antwort in die Funktion einfügen, 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 aufgerufen und die enthaltene exportierte Funktion ausgeführt.
Spezifikationen
| Spezifikation |
|---|
| WebAssembly JavaScript Interface> # webassembly-namespace> |