WebAssembly.Instance() Konstruktor
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.
Der WebAssembly.Instance()
Konstruktor erstellt ein neues
Instance
-Objekt, das eine zustandsbehaftete, ausführbare Instanz eines
WebAssembly.Module
ist.
Syntax
Warnung:
Da die Instanziierung großer Module teuer sein kann,
sollten Entwickler den Instance()
-Konstruktor nur verwenden, wenn eine synchrone
Instanziierung absolut erforderlich ist; die asynchrone
WebAssembly.instantiateStreaming()
Methode sollte in allen anderen
Fällen verwendet werden.
new WebAssembly.Instance(module, importObject);
Parameter
module
-
Das zu instanziierende
WebAssembly.Module
-Objekt. importObject
Optional-
Ein Objekt, das die in die neu erstellte
Instance
zu importierenden Werte enthält, wie Funktionen oderWebAssembly.Memory
-Objekte. Für jeden deklarierten Import vonmodule
muss eine übereinstimmende Eigenschaft vorhanden sein, andernfalls wird einWebAssembly.LinkError
ausgelöst.
Ausnahmen
- Wenn einer der Parameter nicht den richtigen Typ oder die richtige Struktur hat, wird ein
TypeError
ausgelöst. - Wenn die Operation fehlschlägt, wird je nach Ursache des Fehlers entweder ein
WebAssembly.CompileError
,WebAssembly.LinkError
oderWebAssembly.RuntimeError
ausgelöst. - Einige Browser können einen
RangeError
auslösen, da sie die Kompilierung und Instanziierung von Wasm mit großen Puffern im UI-Thread verbieten.
Beispiele
Synchrone Instanziierung eines WebAssembly-Moduls
Die WebAssembly.Instance()
Konstruktionsfunktion kann aufgerufen werden, um ein gegebenes WebAssembly.Module
-Objekt synchron zu instanziieren, zum Beispiel:
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();
});
Der bevorzugte Weg, um eine Instance
zu erhalten, ist jedoch die Verwendung der asynchronen
WebAssembly.instantiateStreaming()
Funktion, zum Beispiel so:
const importObject = {
my_namespace: {
imported_func(arg) {
console.log(arg);
},
},
};
WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
Spezifikationen
Specification |
---|
WebAssembly JavaScript Interface # dom-instance-instance |
Browser-Kompatibilität
BCD tables only load in the browser