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

js
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 oder WebAssembly.Memory-Objekte. Es muss eine passende Eigenschaft für jeden deklarierten Import des kompilierten Moduls geben, ansonsten wird ein WebAssembly.LinkError geworfen.

Rückgabewert

Ein Promise, das auf ein ResultObject auflöst, welches zwei Felder enthält:

Ausnahmen

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.

js
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

Siehe auch