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, welches eine zustandsbehaftete, ausführbare Instanz eines WebAssembly.Module
ist.
Warnung: Da die Instanziierung für große Module teuer sein kann, sollten Entwickler den Instance()
Konstruktor nur verwenden, wenn die synchrone Instanziierung absolut erforderlich ist; die asynchrone WebAssembly.instantiateStreaming()
Methode sollte in allen anderen Fällen verwendet werden.
Syntax
new WebAssembly.Instance(module, importObject)
Parameter
module
Das
WebAssembly.Module
Objekt, das instanziiert werden soll.importObject
OptionalEin Objekt, das die Werte enthält, die in die neu erstellte
Instance
importiert werden sollen, wie z. B. Funktionen oderWebAssembly.Memory
Objekte. Es muss eine übereinstimmende Eigenschaft für jeden deklarierten Import vonmodule
vorhanden sein, andernfalls wird einWebAssembly.LinkError
ausgelöst.
Ausnahmen
- Wenn einer der Parameter nicht vom richtigen Typ oder in der richtigen Struktur ist, 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()
Konstruktorfunktion kann aufgerufen werden, um ein angegebenes 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(); });
Die bevorzugte Methode, 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 |