WebAssembly.Instance() constructor
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.
The WebAssembly.Instance()
constructor creates a new
Instance
object which is a stateful, executable instance of a
WebAssembly.Module
.
Syntax
Warning: Since instantiation for large modules can be expensive,
developers should only use the Instance()
constructor when synchronous
instantiation is absolutely required; the asynchronous
WebAssembly.instantiateStreaming()
method should be used at all other
times.
new WebAssembly.Instance(module, importObject);
Parameters
module
-
The
WebAssembly.Module
object to be instantiated. importObject
Optional-
An object containing the values to be imported into the newly-created
Instance
, such as functions orWebAssembly.Memory
objects. There must be one matching property for each declared import ofmodule
or else aWebAssembly.LinkError
is thrown.
Exceptions
-
If either of the parameters are not of the correct type or structure, a
TypeError
is thrown. -
If the operation fails, one of
WebAssembly.CompileError
,WebAssembly.LinkError
, orWebAssembly.RuntimeError
are thrown, depending on the cause of the failure. - Some browsers may throw a
RangeError
, as they prohibit compilation and instantiation of Wasm with large buffers on the UI thread.
Examples
Synchronously instantiating a WebAssembly module
The WebAssembly.Instance()
constructor function can be called to
synchronously instantiate a given WebAssembly.Module
object, for example:
const importObject = {
my_namespace: {
imported_func(arg) {
console.log(arg);
},
},
};
fetch("simple.wasm")
.then((response) => response.arrayBuffer())
.then((bytes) => {
const mod = new WebAssembly.Module(bytes);
const instance = new WebAssembly.Instance(mod, importObject);
instance.exports.exported_func();
});
However, the preferred way to get an Instance
is through the asynchronous
WebAssembly.instantiateStreaming()
function, for example like this:
const importObject = {
my_namespace: {
imported_func(arg) {
console.log(arg);
},
},
};
WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
Specifications
Specification |
---|
WebAssembly JavaScript Interface # dom-instance-instance |
Browser compatibility
BCD tables only load in the browser