| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/WebAssembly/Reference/JavaScript_interface/instantiate_static | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
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 :
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.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.
WebAssembly.instantiate(bufferSource, importObject);
bufferSourceUn tableau typ ou un ArrayBuffer qui contient le bytecode du module WebAssembly qu'on souhaite compiler ou un objet WebAssembly.Module.
importObject FacultatifUn 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.
Une promesse qui est rsolue en un objet qui contient deux champs :
moduleUn objet WebAssembly.Module qui reprsente le module WebAssembly compil. Ce module peut tre instanci nouveau grce postMessage() ou via un cache.
instanceUn objet WebAssembly.Instance qui contient l'ensemble des fonctions WebAssembly exportes.
TypeError sera leve.WebAssembly.CompileError, WebAssembly.LinkError, ou WebAssembly.RuntimeError selon l'origine de l'chec.WebAssembly.instantiate(module, importObject);
moduleL'objet WebAssembly.Module qui doit tre instanci.
importObject FacultatifUn 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.
Une promesse qui est rsolue en un objet WebAssembly.Instance.
TypeError est leve.WebAssembly.CompileError, WebAssembly.LinkError, ou WebAssembly.RuntimeError selon l'origine de l'chec.Note :
Dans la plupart des cas, on utilisera plus vraisemblablement WebAssembly.instantiateStreaming() qui est plus efficace que instantiate().
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.
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).
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().
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.
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();
});
};
| Spcification |
|---|
| WebAssembly JavaScript Interface # dom-webassembly-instantiate |
Cette page a t modifie le 7 sept. 2025 par les contributeurices du MDN.
Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |