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 Quelle. Dies ist die effizienteste und optimierte Methode, um Wasm-Code zu laden.

Hinweis: Webseiten, die eine strenge Content Security Policy (CSP) haben, könnten die Kompilierung und Ausführung von WebAssembly-Modulen blockieren. Für weitere Informationen darüber, wie Sie die Kompilierung und Ausführung von WebAssembly erlauben, sehen Sie sich die script-src CSP an.

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 Werte enthält, die in die neu erstellte Instance importiert werden sollen, wie Funktionen oder WebAssembly.Memory-Objekte. Es muss eine passende Eigenschaft für jeden deklarierten Import des kompilierten Moduls vorhanden sein, ansonsten wird ein WebAssembly.LinkError ausgelöst.

compileOptions Optional

Ein Objekt, das die Kompilierungsoptionen enthält. Die Eigenschaften können beinhalten:

builtins Optional

Ein Array von Strings, das die Verwendung von JavaScript builtins im kompilierten Wasm-Modul ermöglicht. Die Strings definieren die zu aktivierenden builtins. Derzeit ist der einzige verfügbare Wert "js-string", der JavaScript-String-Builtins aktiviert.

importedStringConstants Optional

Ein String, der einen Namespace für importierte globale String-Konstanten angibt. Diese Eigenschaft muss angegeben werden, wenn Sie importierte globale String-Konstanten im Wasm-Modul verwenden möchten.

Rückgabewert

Ein Promise, das zu einem ResultObject auflöst, welches zwei Felder enthält:

Ausnahmen

Beispiele

Stream-Instantierung

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

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

Aktivierung von JavaScript-Builtins und globalen String-Importen

Dieses Beispiel aktiviert JavaScript-String-Builtins und importierte globale String-Konstanten bei der Kompilierung und Instanziierung des Wasm-Moduls mit instantiateStreaming(), bevor die exportierte main()-Funktion ausgeführt wird (die "hello world!" in die Konsole schreibt). 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

BCD tables only load in the browser

Siehe auch