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
Promiseergibt einModuleals auch die ersteInstance. WebAssembly.instantiateStreaming()- Kompiliert und instanziiert ein WebAssembly-Modul direkt aus einer Streamingquelle, mit dem Rückgabewert als
Promiseergibt sich einModuleals auch die ersteInstance. WebAssembly.compile()- Kompiliert ein
WebAssembly.Moduleaus dem WebAssembly Binärcode, wodurch die Instanziierung als separater Schritt durchgeführt werden kann. WebAssembly.compileStreaming()- Kompiliert ein
WebAssembly.Moduledirekt 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
GlobalObjekt. WebAssembly.Module()- Erzeugt ein neues WebAssembly
ModuleObjekt. WebAssembly.Instance()- Erzeugt ein neues WebAssembly
InstanceObjekt. WebAssembly.Memory()- Erzeugt ein neues WebAssembly
MemoryObjekt. WebAssembly.Table()- Erzeugt ein neues WebAssembly
TableObjekt. WebAssembly.CompileError()- Erzeugt ein neues WebAssembly
CompileErrorObjekt. WebAssembly.LinkError()- Erzeugt ein neues WebAssembly
LinkErrorObjekt. WebAssembly.RuntimeError()- Erzeugt ein neues WebAssembly
RuntimeErrorObjekt.
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.