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.
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.
Syntax
new WebAssembly.Instance(module, importObject)
Parameters
module-
The
WebAssembly.Moduleobject to be instantiated. importObjectOptional-
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 ofmoduleor else aWebAssembly.LinkErroris thrown.
Exceptions
- If either of the parameters are not of the correct type or structure, a
TypeErroris thrown. - If the operation fails, one of
WebAssembly.CompileError,WebAssembly.LinkError, orWebAssembly.RuntimeErrorare 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
Loading…