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 Oktober 2017.
Der WebAssembly.Instance() Konstruktor erstellt ein neues
Instance-Objekt, das eine zustandsbehaftete, ausführbare Instanz eines
WebAssembly.Module ist.
Warnung:
Da die Instanziierung großer Module kostspielig sein kann, sollten Entwickler den Instance()-Konstruktor nur dann verwenden, wenn eine synchrone Instanziierung unbedingt erforderlich ist; die asynchrone Methode WebAssembly.instantiateStreaming() sollte in allen anderen Fällen verwendet werden.
Syntax
new WebAssembly.Instance(module, importObject)
Parameter
module-
Das
WebAssembly.ModuleObjekt, das instanziiert werden soll. importObjectOptional-
Ein Objekt, das die Werte enthält, die in die neu erstellte
Instanceimportiert werden sollen, wie Funktionen oderWebAssembly.MemoryObjekte. Für jeden deklarierten Import desmodulemuss eine passende Eigenschaft vorhanden sein, andernfalls wird einWebAssembly.LinkErrorausgelöst.
Ausnahmen
- Wenn einer der Parameter nicht den korrekten Typ oder die richtige Struktur hat, wird ein
TypeErrorausgelöst. - Wenn die Operation fehlschlägt, wird abhängig von der Ursache des Fehlers entweder ein
WebAssembly.CompileError,WebAssembly.LinkErroroderWebAssembly.RuntimeErrorausgelöst. - Einige Browser können einen
RangeErrorauslö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 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 asynchrone Funktion WebAssembly.instantiateStreaming(), 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
Loading…