WebAssembly.instantiateStreaming()
Baseline
Widely available
*
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis septembre 2021.
* Certaines parties de cette fonctionnalité peuvent bénéficier de prise en charge variables.
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
Responseou une promesse qui sera tenue avec une valeurResponsequi représente la source du module .wasm dont on souhaite récupérer le flux, la compiler puis l'instancier. importObjectFacultatif-
Un objet qui contient les valeurs qui doivent être importées dans le nouvel objet
Instanceré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.LinkErrorsera 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.Modulequi représente le module WebAssembly compilé. Ce module pourra être instancié à nouveau, partagé avecpostMessage(). instance-
Un objet
WebAssembly.Instancequi 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
TypeErrorest déclenchée. - Si l'opération échoue, la promesse lève une exception
WebAssembly.CompileError,WebAssembly.LinkError, ouWebAssembly.RuntimeErrorselon 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
Chargement…