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

js
WebAssembly.instantiateStreaming(source, importObject)

Paramètres

source

Un objet Response ou une promesse qui sera tenue avec une valeur Response 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 objets WebAssembly.Memory. Il est nécessaire qu'il y ait une propriété correspondante pour chaque import déclaré dans le module compilé, sinon, une exception WebAssembly.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é avec postMessage().

instance

Un objet WebAssembly.Instance qui contient l'ensemble des fonctions WebAssembly exportées.

Exceptions

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.

js
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

Voir aussi