MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

WebAssembly.compile()

Cette fonction est expérimentale
Puisque cette fonction est toujours en développement dans certains navigateurs, veuillez consulter le tableau de compatibilité pour les préfixes à utiliser selon les navigateurs.
Il convient de noter qu'une fonctionnalité expérimentale peut voir sa syntaxe ou son comportement modifié dans le futur en fonction des évolutions de la spécification.

La méthode WebAssembly.compile(), permet de compiler un module (WebAssembly.Module à partir d'un code binaire WebAssembly. Cette fonction est utile lorsqu'il est nécessaire de compiler un module avant de l'instancier (dans les autres cas, la méthode WebAssembly.instantiate() sera plus pertinente).

Syntaxe

Promise<WebAssembly.Module> WebAssembly.compile(bufferSource);

Paramètres

bufferSource
Un tableau typé ou un ArrayBuffer contenant le bytecode du module WebAssembly qu'on souhaite compiler.

Valeur de retour

Une promesse (Promise) dont la valeur de résolution est une instance de WebAssembly.Module qui représente le module compilé.

Exceptions

  • Si bufferSource n'est pas un tableau typé, une exception TypeError sera levée.
  • Si la compilation échoue, la promesse sera rompue avec une exception WebAssembly.CompileError.

Exemples

Dans l'exemple suivant, on compile le bytecode contenu dans le fichier simple.wasm grâce à la fonction compile() puis on envoie le module à un worker grâce à postMessage().

var worker = new Worker("wasm_worker.js");

fetch('simple.wasm').then(response =>
  response.arrayBuffer()
).then(bytes =>
  WebAssembly.compile(bytes)
).then(mod =>
  worker.postMessage(mod)
);

Dans le worker (cf. wasm_worker.js) on définit un objet d'import à utiliser dans le module. On paramètre un gestionnaire d'évènement afin de recevoir le module depuis le thread principal. Lorsqu'on reçoit le module, on crée une instance grâce à la méthode WebAssembly.Instantiate() puis on appelle une fonction exportée depuis le module et on affiche les exports disponibles grâce à la propriété WebAssembly.Module.exports :

var importObject = {
  imports: {
    imported_func: function(arg) {
      console.log(arg);
    }
  }
};

onmessage = function(e) {
  console.log('module received from main thread');
  var mod = e.data;

  WebAssembly.instantiate(mod, importObject).then(function(instance) {
    instance.exports.exported_func();
  });

  var exports = WebAssembly.Module.exports(mod);
  console.log(exports[0]);
};

Spécifications

Spécification État Commentaires
Web Assembly JavaScript API
La définition de 'compile()' dans cette spécification.
Projet Brouillon de définition initiale pour WebAssembly.

Compatibilité des navigateurs

Fonctionnalité Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Support simple 57 15[2] 52 (52)[1] Pas de support 44 11
Fonctionnalité Chrome pour Android Webview Android Edge Mobile Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple 57 57 Pas de support 52.0 (52)[1] Pas de support Pas de support 11

[1] WebAssembly est activé dans Firefox 52+ mais est désactivé pour Firefox 52 Extended Support Release (ESR).

[2] Actuellement pris en charge via la préférence Fonctionnalités JavaScript expérimentales, voir ce billet (en anglais) pour plus d'informations.

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight
 Dernière mise à jour par : SphinxKnight,