WebAssembly.instantiateStreaming()
==================================

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

* 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`, ou `WebAssembly.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.


```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 with JavaScript enabled. Enable JavaScript to view data.

Voir aussi
----------

* La page d'aperçu de WebAssembly
* Les concepts relatifs à WebAssembly
* Utiliser l'API JavaScript de WebAssembly