WebAssembly.instantiateStreaming()
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.
La méthode statique WebAssembly.instantiateStreaming()
permet de compiler et d'instancier un module WebAssembly depuis un flux source. C'est la méthode la plus efficace, et la plus optimisée, permettant de charger du code WebAssembly.
Note : Les pages web qui utilisent une CSP stricte peuvent bloquer la compilation WebAssembly et l'exécution des modules. Pour plus d'informations pour l'autorisation de la compilation et de l'exécution, voir la directive CSP script-src
.
Syntaxe
WebAssembly.instantiateStreaming(source, importObject)
Paramètres
source
-
Un objet
Response
ou une promesse qui sera tenue avec une valeurResponse
qui représente la source du module .wasm dont on souhaite récupérer le flux, la compiler puis l'instancier. importObject
Facultatif-
Un objet qui contient les valeurs qui doivent être importées dans le nouvel objet
Instance
résultant. Cela peut être des fonctions ou des objetsWebAssembly.Memory
. Il est nécessaire qu'il y ait une propriété correspondante pour chaque import déclaré dans le module compilé, sinon, une exceptionWebAssembly.LinkError
sera levée.
Valeur de retour
Un objet Promise
dont la valeur de résolution est un objet ResultObject
contenant deux champs :
module
-
Un objet
WebAssembly.Module
qui représente le module WebAssembly compilé. Ce module pourra être instancié à nouveau, partagé avecpostMessage()
. instance
-
Un objet
WebAssembly.Instance
qui contient l'ensemble des fonctions WebAssembly exportées.
Exceptions
- Si l'un des paramètres n'est pas du bon type ou ne possède pas la bonne structure, une exception
TypeError
est déclenchée. - Si l'opération échoue, la promesse lève une exception
WebAssembly.CompileError
,WebAssembly.LinkError
, ouWebAssembly.RuntimeError
selon la cause de l'échec.
Examples
Dans l'exemple suivant (également disponible sur GitHub : instantiate-streaming.html
et avec le résultat live), on récupère le flux d'un module .wasm depuis une source, on le compile et on l'instancie. La promesse est alors résolue avec un objet ResultObject
. La méthode instantiateStreaming()
acceptant une promesse fournissant un objet Response
, on peut directement l'appel de fetch()
en argument qui transfèrera la réponse lorsque la promesse résultante sera tenue.
const importObject = { imports: { imported_func: (arg) => console.log(arg) } };
WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
Ensuite, on accède au champ instance
de l'objet ResultObject
afin de pouvoir invoquer une des fonctions exportées.
Note : Pour que cela fonctionne, il faut que les fichiers soient renvoyés avec le type MIME application/wasm
par le serveur.
Spécifications
Specification |
---|
WebAssembly Web API # dom-webassembly-instantiatestreaming |
Compatibilité des navigateurs
BCD tables only load in the browser