WebAssembly.instantiateStreaming()
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.
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