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.
L'objet JavaScript WebAssembly
est un objet global qui agit comme un espace de noms (namespace) pour les différentes fonctionnalités JavaScript relatives à WebAssembly.
À la différence des autres objets globaux, WebAssembly
n'est pas un constructeur (au même titre que Math
qui agit comme un espace de noms pour les constantes et fonctions mathématiques ou comme Intl
qui centralise les constructeurs et les opérations relatives à l'internationalisation).
Description
L'objet WebAssembly
est notamment utilisé pour :
- Charger du code WebAssembly grâce à la fonction
WebAssembly.instantiate()
- Créer des zones mémoires et des instances de tableaux grâce aux constructeurs
WebAssembly.Memory()
/WebAssembly.Table()
. - Fournir des outils de gestion d'erreur WebAssembly grâce aux constructeurs
WebAssembly.CompileError()
/WebAssembly.LinkError()
/WebAssembly.RuntimeError()
.
Méthodes
WebAssembly.instantiate()
-
La méthode qu'on utilisera la plupart du temps pour compiler et instancier du code WebAssembly, elle renvoie une promesse qui est résolue en une
Instance
ou en uneInstance
et unModule
. WebAssembly.instantiateStreaming()
-
Cette méthode permet de compiler et d'instancier un module WebAssembly à partir d'un flux source (streamed source). Elle renvoie à la fois un objet
Module
et sa premièreInstance
. WebAssembly.compile()
-
Cette méthode permet de compiler un
WebAssembly.Module
à partir de bytecode WebAssembly, l'instanciation doit alors être effectuée dans une autre étape. WebAssembly.compileStreaming()
-
Cette méthode permet de compiler un module
WebAssembly.Module
à partir d'un flux source (streamed source). L'instanciation devra alors être réalisée avec une autre étape. WebAssembly.validate()
-
Cette méthode permet de valider un tableau typé censé contenir du bytecode WebAssembly : elle renvoie
true
si les octets forment un code WebAssembly valide oufalse
sinon.
Constructeurs
WebAssembly.Global()
-
Ce constructeur permet de créer un nouvel objet WebAssembly
Global
. WebAssembly.Module()
-
Ce constructeur permet de créer un objet WebAssembly
Module
. WebAssembly.Instance()
-
Ce constructeur permet de créer un objet WebAssembly
Instance
. WebAssembly.Memory()
-
Ce constructeur permet de créer un objet WebAssembly
Memory
. WebAssembly.Table()
-
Ce constructeur permet de créer un objet WebAssembly
Table
. WebAssembly.CompileError()
-
Ce constructeur permet de créer un objet WebAssembly
CompileError
. WebAssembly.LinkError()
-
Ce constructeur permet de créer un objet WebAssembly
LinkError
. WebAssembly.RuntimeError()
-
Ce constructeur permet de créer un objet WebAssembly
RuntimeError
.
Exemples
L'exemple suivant (cf. le fichier instantiate-streaming.html
sur GitHub et le résultat obtenu) permet de récupérer le module WebAssembly via un flux depuis une source, de le compiler, puis de l'instancier. La promesse est résolue avec un objet ResultObject
. La méthode instantiateStreaming()
accepte une promesse pour l'argument Response
, on peut lui passer directement un appel à fetch()
qui passera ensuite la réponse à la fonction lors de la complétion de la promesse.
var importObject = { imports: { imported_func: (arg) => console.log(arg) } };
WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
On accède alors à la propriété de l'instance ResultObject
puis on appelle la fonction exportée.
Spécifications
Specification |
---|
WebAssembly JavaScript Interface # webassembly-namespace |
Compatibilité des navigateurs
BCD tables only load in the browser