WebAssembly.instantiateStreaming()
Die WebAssembly.instantiateStreaming()
statische Methode kompiliert und instanziiert ein WebAssembly-Modul direkt aus einer gestreamten zugrunde liegenden Quelle. Dies ist die effizienteste und optimierteste Möglichkeit, Wasm-Code zu laden.
Hinweis: Webseiten, die eine strikte Content Security Policy (CSP) haben, könnten die Kompilierung und Ausführung von WebAssembly-Modulen blockieren. Weitere Informationen zum Zulassen der Kompilierung und Ausführung von WebAssembly finden Sie unter script-src CSP.
Syntax
WebAssembly.instantiateStreaming(source, importObject)
Parameter
source
-
Ein
Response
-Objekt oder ein Versprechen, das mit einem solchen erfüllt wird und die zugrunde liegende Quelle eines Wasm-Moduls darstellt, das Sie streamen, kompilieren und instanziieren möchten. importObject
Optional-
Ein Objekt, das die Werte enthält, die in das neu erstellte
Instance
importiert werden sollen, wie z.B. Funktionen oderWebAssembly.Memory
-Objekte. Es muss eine passende Eigenschaft für jeden deklarierten Import des kompilierten Moduls geben, ansonsten wird einWebAssembly.LinkError
geworfen.
Rückgabewert
Ein Promise
, das auf ein ResultObject
auflöst, welches zwei Felder enthält:
module
: EinWebAssembly.Module
-Objekt, das das kompilierte WebAssembly-Modul repräsentiert. DiesesModule
kann erneut instanziiert oder über postMessage() geteilt werden.instance
: EinWebAssembly.Instance
-Objekt, das alle Exportierten WebAssembly-Funktionen enthält.
Ausnahmen
- Wenn einer der Parameter nicht den korrekten Typ oder die korrekte Struktur aufweist, wird ein
TypeError
geworfen. -
Wenn der Vorgang fehlschlägt, wird das Versprechen mit einem
WebAssembly.CompileError
,WebAssembly.LinkError
oderWebAssembly.RuntimeError
abgelehnt, abhängig von der Ursache des Fehlers.
Beispiele
Streaming instanziieren
Im folgenden Beispiel (siehe unser instantiate-streaming.html-Demo auf GitHub, und sehen Sie es sich live an auch) wird ein Wasm-Modul direkt aus einer zugrunde liegenden Quelle gestreamt, dann kompiliert und instanziiert. Das Versprechen wird mit einem ResultObject
erfüllt. Da die Funktion instantiateStreaming()
ein Versprechen für ein Response
-Objekt akzeptiert, können Sie ihr direkt einen fetch()
-Aufruf übergeben, und sie wird die Antwort in die Funktion übergeben, wenn sie erfüllt wird.
const importObject = {
my_namespace: { imported_func: (arg) => console.log(arg) },
};
WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
Das ResultObject
-Instanzmitglied wird dann aufgerufen und die darin enthaltene exportierte Funktion ausgeführt.
Hinweis: Damit dies funktioniert, sollten .wasm
-Dateien vom Server mit einem application/wasm
MIME-Typ zurückgegeben werden.
Spezifikationen
Specification |
---|
WebAssembly Web API # dom-webassembly-instantiatestreaming |
Browser-Kompatibilität
BCD tables only load in the browser