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()
Funktion. - Neue Speicher- und Tabelleninstanzen mittels der
WebAssembly.Memory()
/WebAssembly.Table()
Konstruktoren. - Bereitstellen von Einrichtungen zur Fehlerbehandlung, die in WebAssembly auftreten, mittels der
WebAssembly.CompileError()
/WebAssembly.LinkError()
/WebAssembly.RuntimeError()
Konstruktoren.
Methoden
WebAssembly.instantiate()
- 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()
- 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
aus dem WebAssembly Binärcode, wodurch die Instanziierung als separater Schritt durchgeführt werden kann. WebAssembly.compileStreaming()
- Kompiliert ein
WebAssembly.Module
direkt aus einer Streamingquelle, wodurch die Instanziierung als separater Schritt durchgeführt werden kann. WebAssembly.validate()
- 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()
- Erzeugt ein neues WebAssembly
Global
Objekt. WebAssembly.Module()
- Erzeugt ein neues WebAssembly
Module
Objekt. WebAssembly.Instance()
- Erzeugt ein neues WebAssembly
Instance
Objekt. WebAssembly.Memory()
- Erzeugt ein neues WebAssembly
Memory
Objekt. WebAssembly.Table()
- Erzeugt ein neues WebAssembly
Table
Objekt. WebAssembly.CompileError()
- Erzeugt ein neues WebAssembly
CompileError
Objekt. WebAssembly.LinkError()
- Erzeugt ein neues WebAssembly
LinkError
Objekt. WebAssembly.RuntimeError()
- 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()
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
Desktop | Mobile | Server | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
WebAssembly | Chrome Vollständige Unterstützung 57 | Edge Vollständige Unterstützung 16 | Firefox
Vollständige Unterstützung
52
| IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 44 | Safari Vollständige Unterstützung 11 | WebView Android Vollständige Unterstützung 57 | Chrome Android Vollständige Unterstützung 57 | Firefox Android
Vollständige Unterstützung
52
| Opera Android Vollständige Unterstützung Ja | Safari iOS Vollständige Unterstützung 11 | Samsung Internet Android Vollständige Unterstützung 7.0 | nodejs Vollständige Unterstützung 8.0.0 |
CompileError | Chrome Vollständige Unterstützung 57 | Edge Vollständige Unterstützung 16 | Firefox
Vollständige Unterstützung
52
| IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 44 | Safari Vollständige Unterstützung 11 | WebView Android Vollständige Unterstützung 57 | Chrome Android Vollständige Unterstützung 57 | Firefox Android
Vollständige Unterstützung
52
| Opera Android ? | Safari iOS Vollständige Unterstützung 11 | Samsung Internet Android Vollständige Unterstützung 7.0 | nodejs Vollständige Unterstützung 8.0.0 |
Global | Chrome Vollständige Unterstützung 69 | Edge Keine Unterstützung Nein | Firefox Vollständige Unterstützung 62 | IE Keine Unterstützung Nein | Opera Keine Unterstützung Nein | Safari Keine Unterstützung Nein | WebView Android Vollständige Unterstützung 69 | Chrome Android Vollständige Unterstützung 69 | Firefox Android Vollständige Unterstützung 62 | Opera Android Keine Unterstützung Nein | Safari iOS Keine Unterstützung Nein | Samsung Internet Android Vollständige Unterstützung 10.0 | nodejs Keine Unterstützung Nein |
Instance | Chrome Vollständige Unterstützung 57 | Edge Vollständige Unterstützung 16 | Firefox
Vollständige Unterstützung
52
| IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 44 | Safari Vollständige Unterstützung 11 | WebView Android Vollständige Unterstützung 57 | Chrome Android Vollständige Unterstützung 57 | Firefox Android
Vollständige Unterstützung
52
| Opera Android ? | Safari iOS Vollständige Unterstützung 11 | Samsung Internet Android Vollständige Unterstützung 7.0 | nodejs Vollständige Unterstützung 8.0.0 |
LinkError | Chrome Vollständige Unterstützung 57 | Edge Vollständige Unterstützung 16 | Firefox
Vollständige Unterstützung
52
| IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 44 | Safari Vollständige Unterstützung 11 | WebView Android Vollständige Unterstützung 57 | Chrome Android Vollständige Unterstützung 57 | Firefox Android
Vollständige Unterstützung
52
| Opera Android ? | Safari iOS Vollständige Unterstützung 11 | Samsung Internet Android Vollständige Unterstützung 7.0 | nodejs Vollständige Unterstützung 8.0.0 |
Memory | Chrome Vollständige Unterstützung 57 | Edge Vollständige Unterstützung 16 | Firefox
Vollständige Unterstützung
52
| IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 44 | Safari Vollständige Unterstützung 11 | WebView Android Vollständige Unterstützung 57 | Chrome Android Vollständige Unterstützung 57 | Firefox Android
Vollständige Unterstützung
52
| Opera Android ? | Safari iOS Vollständige Unterstützung 11 | Samsung Internet Android Vollständige Unterstützung 7.0 | nodejs Vollständige Unterstützung 8.0.0 |
Module | Chrome Vollständige Unterstützung 57 | Edge Vollständige Unterstützung 16 | Firefox
Vollständige Unterstützung
52
| IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 44 | Safari Vollständige Unterstützung 11 | WebView Android Vollständige Unterstützung 57 | Chrome Android Vollständige Unterstützung 57 | Firefox Android
Vollständige Unterstützung
52
| Opera Android ? | Safari iOS Vollständige Unterstützung 11 | Samsung Internet Android Vollständige Unterstützung 7.0 | nodejs Vollständige Unterstützung 8.0.0 |
RuntimeError | Chrome Vollständige Unterstützung 57 | Edge Vollständige Unterstützung 16 | Firefox
Vollständige Unterstützung
52
| IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 44 | Safari Vollständige Unterstützung 11 | WebView Android Vollständige Unterstützung 57 | Chrome Android Vollständige Unterstützung 57 | Firefox Android
Vollständige Unterstützung
52
| Opera Android ? | Safari iOS Vollständige Unterstützung 11 | Samsung Internet Android Vollständige Unterstützung 7.0 | nodejs Vollständige Unterstützung 8.0.0 |
Table | Chrome Vollständige Unterstützung 57 | Edge Vollständige Unterstützung 16 | Firefox
Vollständige Unterstützung
52
| IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 44 | Safari Vollständige Unterstützung 11 | WebView Android Vollständige Unterstützung 57 | Chrome Android Vollständige Unterstützung 57 | Firefox Android
Vollständige Unterstützung
52
| Opera Android ? | Safari iOS Vollständige Unterstützung 11 | Samsung Internet Android Vollständige Unterstützung 7.0 | nodejs Vollständige Unterstützung 8.0.0 |
compile | Chrome Vollständige Unterstützung 57 | Edge Vollständige Unterstützung 16 | Firefox
Vollständige Unterstützung
52
| IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 44 | Safari Vollständige Unterstützung 11 | WebView Android Vollständige Unterstützung 57 | Chrome Android Vollständige Unterstützung 57 | Firefox Android
Vollständige Unterstützung
52
| Opera Android Vollständige Unterstützung 43 | Safari iOS Vollständige Unterstützung 11 | Samsung Internet Android Vollständige Unterstützung 7.0 | nodejs Vollständige Unterstützung 8.0.0 |
compileStreaming | Chrome Vollständige Unterstützung 61 | Edge Vollständige Unterstützung 16 | Firefox Vollständige Unterstützung 58 | IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 47 | Safari Keine Unterstützung Nein | WebView Android Vollständige Unterstützung 61 | Chrome Android Vollständige Unterstützung 61 | Firefox Android Vollständige Unterstützung 58 | Opera Android ? | Safari iOS Keine Unterstützung Nein | Samsung Internet Android Vollständige Unterstützung 8.0 | nodejs Keine Unterstützung Nein |
instantiate | Chrome Vollständige Unterstützung 57 | Edge Vollständige Unterstützung 16 | Firefox
Vollständige Unterstützung
52
| IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 44 | Safari Vollständige Unterstützung 11 | WebView Android Vollständige Unterstützung 57 | Chrome Android Vollständige Unterstützung 57 | Firefox Android
Vollständige Unterstützung
52
| Opera Android ? | Safari iOS Vollständige Unterstützung 11 | Samsung Internet Android Vollständige Unterstützung 7.0 | nodejs Vollständige Unterstützung 8.0.0 |
instantiateStreaming | Chrome Vollständige Unterstützung 61 | Edge Vollständige Unterstützung 16 | Firefox Vollständige Unterstützung 58 | IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 47 | Safari Keine Unterstützung Nein | WebView Android Vollständige Unterstützung 61 | Chrome Android Vollständige Unterstützung 61 | Firefox Android Vollständige Unterstützung 58 | Opera Android ? | Safari iOS Keine Unterstützung Nein | Samsung Internet Android Vollständige Unterstützung 8.0 | nodejs Keine Unterstützung Nein |
validate | Chrome Vollständige Unterstützung 57 | Edge Vollständige Unterstützung 16 | Firefox
Vollständige Unterstützung
52
| IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 44 | Safari Vollständige Unterstützung 11 | WebView Android Vollständige Unterstützung 57 | Chrome Android Vollständige Unterstützung 57 | Firefox Android
Vollständige Unterstützung
52
| Opera Android ? | Safari iOS Vollständige Unterstützung 11 | Samsung Internet Android Vollständige Unterstützung 7.0 | nodejs Vollständige Unterstützung 8.0.0 |
Legende
- Vollständige Unterstützung
- Vollständige Unterstützung
- Keine Unterstützung
- Keine Unterstützung
- Kompatibilität unbekannt
- Kompatibilität unbekannt
- Siehe Implementierungshinweise.
- Siehe Implementierungshinweise.