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.

* Some parts of this feature may have varying levels of support.

Die statische Methode WebAssembly.instantiateStreaming() kompiliert und instanziiert ein WebAssembly-Modul direkt aus einer gestreamten zugrunde liegenden Quelle. Dies ist die effizienteste und optimierteste Methode, um Wasm-Code zu laden.

Hinweis: Webseiten, die eine strikte Content Security Policy (CSP) haben, könnten verhindern, dass WebAssembly-Module kompiliert und ausgeführt werden. Weitere Informationen zum Erlauben der Kompilierung und Ausführung von WebAssembly finden Sie unter script-src CSP.

Syntax

js
WebAssembly.instantiateStreaming(source)
WebAssembly.instantiateStreaming(source, importObject)
WebAssembly.instantiateStreaming(source, importObject, compileOptions)

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 in die neu erstellte Instance zu importierenden Werte enthält, wie z. B. Funktionen oder WebAssembly.Memory-Objekte. Es muss für jeden deklarierten Import des kompilierten Moduls eine übereinstimmende Eigenschaft geben, sonst wird ein WebAssembly.LinkError ausgelöst.

compileOptions Optional

Ein Objekt, das Kompilierungsoptionen enthält. Eigenschaften können umfassen:

builtins Optional

Ein Array von Zeichenfolgen, das die Verwendung von JavaScript builtins im kompilierten Wasm-Modul ermöglicht. Die Zeichenfolgen definieren die builtins, die Sie aktivieren möchten. Derzeit ist der einzige verfügbare Wert "js-string", welcher JavaScript-String-builtin-Funktionen aktiviert.

importedStringConstants Optional

Eine Zeichenfolge, die einen Namensraum für importierte globale Zeichenfolgenkonstanten spezifiziert. Diese Eigenschaft muss angegeben werden, wenn Sie in dem Wasm-Modul importierte globale Zeichenfolgenkonstanten verwenden möchten.

Rückgabewert

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

Ausnahmen

Beispiele

Streaming-Instanziierung

Das folgende Beispiel (siehe unser instantiate-streaming.html Demo auf GitHub, und sehen Sie es live) streamt ein Wasm-Modul direkt aus einer zugrunde liegenden Quelle, kompiliert es und instanziiert es, wobei das Versprechen mit einem ResultObject erfüllt wird. Da die Funktion instantiateStreaming() ein Versprechen für ein Response-Objekt akzeptiert, können Sie direkt einen fetch()-Aufruf übergeben, der die Antwort in die Funktion übergibt, wenn es 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's instance-Element wird dann aufgerufen und die darin enthaltene exportierte Funktion wird aufgerufen.

Hinweis: Damit dies funktioniert, sollten .wasm-Dateien vom Server mit dem MIME-Typ application/wasm zurückgegeben werden.

Aktivieren von JavaScript builtins und globalen String-Importen

Dieses Beispiel aktiviert JavaScript-String-builtin-Funktionen und importierte globale String-Konstanten beim Kompilieren und Instanziieren des Wasm-Moduls mit instantiateStreaming(), bevor die exportierte main()-Funktion ausgeführt wird (die "hello world!" in die Konsole protokolliert). Sehen Sie es live laufen.

js
const importObject = {
  // Regular import
  m: {
    log: console.log,
  },
};

const compileOptions = {
  builtins: ["js-string"], // Enable JavaScript string builtins
  importedStringConstants: "string_constants", // Enable imported global string constants
};

WebAssembly.instantiateStreaming(
  fetch("log-concat.wasm"),
  importObject,
  compileOptions,
).then((result) => result.instance.exports.main());

Spezifikationen

Specification
WebAssembly Web API
# dom-webassembly-instantiatestreaming

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
instantiateStreaming() static method
compileOptions parameter

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support

Siehe auch