WebAssembly
Das WebAssembly
JavaScript Objekt existiert als Namensraum für alle WebAssembly-bezogenen Funktionalitäten.
Anders als die meisten anderen globalen Objekte, ist WebAssembly
kein Konstruktor (es ist kein Funktionsobjekt). Es kann mit Math
verglichen werden, welches ebenfalls einen Namensraum für mathematische Konstanten und Funktionen bildet. Oder mit Intl
, welches den Namensraum für die Internationalisierunges API mit sprachabhängigen Funktionen bildet.
Beschreibung
Die primäre Verwendung des WebAssembly
Objekts sind:
- Laden von WebAssembly Code, verwenden der
WebAssembly.instantiate()
(en-US) Funktion. - Neue Speicher- und Tabelleninstanzen mittels der
WebAssembly.Memory()
(en-US)/WebAssembly.Table()
(en-US) Konstruktoren. - Bereitstellen von Einrichtungen zur Fehlerbehandlung, die in WebAssembly auftreten, mittels der
WebAssembly.CompileError()
(en-US)/WebAssembly.LinkError()
(en-US)/WebAssembly.RuntimeError()
(en-US) Konstruktoren.
Methoden
WebAssembly.instantiate()
(en-US)- Die primäre API für das Kompilieren und Instanziieren des WebAssembly Codes. Der Rückgabewert als
Promise
ergibt einModule
als auch die ersteInstance
. WebAssembly.instantiateStreaming()
(en-US)- Kompiliert und instanziiert ein WebAssembly-Modul direkt aus einer Streamingquelle, mit dem Rückgabewert als
Promise
ergibt sich einModule
als auch die ersteInstance
. WebAssembly.compile()
- Kompiliert ein
WebAssembly.Module
(en-US) aus dem WebAssembly Binärcode, wodurch die Instanziierung als separater Schritt durchgeführt werden kann. WebAssembly.compileStreaming()
- Kompiliert ein
WebAssembly.Module
(en-US) direkt aus einer Streamingquelle, wodurch die Instanziierung als separater Schritt durchgeführt werden kann. WebAssembly.validate()
(en-US)- Validiert das gegebene, typisierte Array eines WebAssembly Binärcodes. Gibt zurück, ob die Bytes validen WebAssembly Code darstellen (
true
) oder nicht (false
).
Konstruktoren
WebAssembly.Global()
(en-US)- Erzeugt ein neues WebAssembly
Global
Objekt. WebAssembly.Module()
(en-US)- Erzeugt ein neues WebAssembly
Module
Objekt. WebAssembly.Instance()
(en-US)- Erzeugt ein neues WebAssembly
Instance
Objekt. WebAssembly.Memory()
(en-US)- Erzeugt ein neues WebAssembly
Memory
Objekt. WebAssembly.Table()
(en-US)- Erzeugt ein neues WebAssembly
Table
Objekt. WebAssembly.CompileError()
(en-US)- Erzeugt ein neues WebAssembly
CompileError
Objekt. WebAssembly.LinkError()
(en-US)- Erzeugt ein neues WebAssembly
LinkError
Objekt. WebAssembly.RuntimeError()
(en-US)- Erzeugt ein neues WebAssembly
RuntimeError
Objekt.
Beispiele
Das folgende Beispiel (siehe instantiate-streaming.html Demo auf GitHub, siehe auch live) streamt ein .wasm Modul direkt aus einer zugrunde liegenden Quelle, um es dann zu kompilieren und zu instanziieren. Das Promise erfüllt sich mit einem ResultObject
. Weil die instantiateStreaming()
Funktion ein Promise für ein Response
akzeptiert, kann ihr ein WindowOrWorkerGlobalScope.fetch()
(en-US) direkt übergeben werden, welches die Antwort an die Funktion weitergibt, sobald das Promise sich erfüllt.
var importObject = { imports: { imported_func: arg => console.log(arg) } };
WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject)
.then(obj => obj.instance.exports.exported_func());
Auf die ResultObject
Instanz wird damit zugegriffen und die beinhaltete, exportierte Funktion aufgerufen.
Spezifikationen
Specification | Status | Comment |
---|---|---|
WebAssembly JavaScript Interface Die Definition von 'WebAssembly' in dieser Spezifikation. |
Arbeitsentwurf | Initial draft definition. |
Browserkompatibilität
BCD tables only load in the browser