MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-survey

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
WebAssembly JavaScript API
La définition de 'compile()' dans cette spécification.
Projet Brouillon de définition initiale pour WebAssembly.

Compatibilité des navigateurs

FonctionnalitéChromeEdgeFirefoxInternet ExplorerOperaSafari
Support simple5716522 Non4411
FonctionnalitéAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Support simple5757 Oui1522 Non ?11

1. This feature is behind the Experimental JavaScript Features preference.

2. Disabled in the Firefox 52 Extended Support Release (ESR).

Voir aussi

Étiquettes et contributeurs liés au document

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