WebAssembly.instantiateStreaming()
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
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 aWebAssembly.LinkErroris 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
Instantiating streaming
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 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.
Note: For this to work, .wasm files should be returned
with an application/wasm MIME type by the server.
Specifications
| Specification |
|---|
| WebAssembly Web API # dom-webassembly-instantiatestreaming |
Browser compatibility
BCD tables only load in the browser