[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/WebAssembly/Reference/JavaScript_interface/instantiate_static [Back]  [Original]

WebAssembly.instantiate() - WebAssembly | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

WebAssembly.instantiate()

Baseline Large disponibilit *

Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis octobre 2017.

* Certaines parties de cette fonctionnalit peuvent bnficier de prise en charge variables.

La mthode statique WebAssembly.instantiate() permet de compiler et d'instancier du code WebAssembly. Cette fonction possde deux formes :

  • La premire forme prend un code binaire WebAssembly sous forme d'un tableau typ ou d'un ArrayBuffer et effectue les tapes de compilation et d'instanciation en une fois. La valeur de rsolution de la promesse renvoye se compose d'un module WebAssembly.Module compil et de sa premire instance WebAssembly.Instance.
  • La seconde forme prend un module (WebAssembly.Module) dj compil et renvoie une promesse dont la valeur de rsolution est une instance de ce module. Cette forme s'avre utile lorsque le module a dj t compil.

Attention : Tant que faire se peut, utiliser la mthode WebAssembly.instantiateStreaming(), car elle est plus efficace et rcupre, compile et instancie un module en une seule tape partir du bytecode et il n'est pas ncessaire de passer par une conversion en ArrayBuffer.

Dans cet article

Syntaxe

Premire forme : utiliser le code binaire WebAssembly

js
WebAssembly.instantiate(bufferSource, importObject);

Paramtres

bufferSource

Un tableau typ ou un ArrayBuffer qui contient le bytecode du module WebAssembly qu'on souhaite compiler ou un objet WebAssembly.Module.

importObject Facultatif

Un objet qui contient les valeurs importer dans l'instance qui sera cre. Ces valeurs peuvent tre des fonctions ou des objets WebAssembly.Memory. Il doit y avoir une proprit correspondante au sein du module compil pour chacun des imports, si ce n'est pas le cas, une exception WebAssembly.LinkError sera leve.

Valeur de retour

Une promesse qui est rsolue en un objet qui contient deux champs :

module

Un objet WebAssembly.Module qui reprsente le module WebAssembly compil. Ce module peut tre instanci nouveau grce postMessage() ou via un cache.

instance

Un objet WebAssembly.Instance qui contient l'ensemble des fonctions WebAssembly exportes.

Exceptions

Seconde forme : utiliser une instance d'un module

js
WebAssembly.instantiate(module, importObject);

Paramtres

module

L'objet WebAssembly.Module qui doit tre instanci.

importObject Facultatif

Un objet qui contient les valeurs importer dans l'instance qui sera cre. Ces valeurs peuvent tre des fonctions ou des objets WebAssembly.Memory. Il doit y avoir une proprit correspondante au sein du module compil pour chacun des imports, si ce n'est pas le cas, une exception WebAssembly.LinkError sera leve.

Valeur de retour

Une promesse qui est rsolue en un objet WebAssembly.Instance.

Exceptions

Exemples

Note : Dans la plupart des cas, on utilisera plus vraisemblablement WebAssembly.instantiateStreaming() qui est plus efficace que instantiate().

Premire forme

Aprs avoir rcupr le code binaire WebAssembly grce fetch(), on compile et on instancie le module grce la fonction WebAssembly.instantiate() et on importe une fonction JavaScript dans le module lors de cette tape. Ensuite, on invoque une fonction WebAssembly exporte via l'instance.

js
const importObject = {
  imports: {
    imported_func(arg) {
      console.log(arg);
    },
  },
};

fetch("simple.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => WebAssembly.instantiate(bytes, importObject))
  .then((result) => result.instance.exports.exported_func());

Note : Voir le fichier index.html sur GitHub (ainsi que la dmonstration associe).

Seconde forme

Dans l'exemple qui suit (tir du fichier index-compile.html sur GitHub et qui dispose d'une dmonstration), on compile le bytecode du module charg simple.wasm grce la fonction WebAssembly.compileStreaming() puis on envoie le rsultat un worker grce la mthode postMessage().

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

WebAssembly.compileStreaming(fetch("simple.wasm")).then((mod) =>
  worker.postMessage(mod),
);

Dans le worker (cf. wasm_worker.js), on dfinit un objet d'import qui sera utilis par le module puis on paramtre un gestionnaire d'vnement afin de recevoir le module depuis le thread principal. Lorsqu'on reoit le module, on en cre une instance grce la mthode WebAssembly.instantiate() puis on appelle une fonction exporte depuis le module.

js
const importObject = {
  imports: {
    imported_func(arg) {
      console.log(arg);
    },
  },
};

onmessage = (e) => {
  console.log("module received from main thread");
  const mod = e.data;

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

Spcifications

Spcification
WebAssembly JavaScript Interface
# dom-webassembly-instantiate

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page