The WebAssembly.instantiateStreaming() function compiles and instantiates a WebAssembly module directly from a streamed underlying source. This is the most efficient, optimized way to load wasm code.
Syntax
Promise<ResultObject> WebAssembly.instantiateStreaming(source, importObject);
Parameters
- source
- A
Responseobject or a promise that will fulfill with one, representing the underlying source of a .wasm module you want to stream, compile, and instantiate. - importObject Optional
- An object containing the values to be imported into the newly-created
Instance, such as functions orWebAssembly.Memoryobjects. There must be one matching property for each declared import of the compiled module or else a WebAssembly.LinkError is thrown.
Return value
A Promise that resolves to a ResultObject which contains two fields:
module: AWebAssembly.Moduleobject representing the compiled WebAssembly module. ThisModulecan be instantiated again or shared via postMessage().instance: AWebAssembly.Instanceobject that contains all the Exported WebAssembly functions.
Exceptions
- If either of the parameters are not of the correct type or structure, a
TypeErroris thrown. - If the operation fails, the promise rejects with a
WebAssembly.CompileError,WebAssembly.LinkError, orWebAssembly.RuntimeError, depending on the cause of the failure.
Examples
The following example (see our instantiate-streaming.html demo on GitHub, and view it live also) directly streams a .wasm module from an underlying source then compiles and instantiates it, the promise fulfilling with a ResultObject. Because the instantiateStreaming() function accepts a promise for a Response object, you can directly pass it a WindowOrWorkerGlobalScope.fetch() call, and it will pass the response into the function when it fulfills.
var importObject = { imports: { imported_func: arg => console.log(arg) } };
WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject)
.then(obj => obj.instance.exports.exported_func());
The ResultObject's instance member is then accessed, and the contained exported function invoked.
Specifications
| Specification | Status | Comment |
|---|---|---|
| WebAssembly features for web embedding The definition of 'instantiateStreaming()' in that specification. |
Draft | Initial draft definition. |
Browser compatibility
| Desktop | Mobile | Server | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | Node.js | |
| Basic support | Chrome Full support 61 | Edge Full support 16 | Firefox Full support 58 | IE No support No | Opera Full support 47 | Safari No support No | WebView Android Full support 61 | Chrome Android Full support 61 | Edge Mobile No support No | Firefox Android Full support 58 | Opera Android ? | Safari iOS No support No | Samsung Internet Android No support No | nodejs No support No |
Legend
- Full support
- Full support
- No support
- No support
- Compatibility unknown
- Compatibility unknown