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 statische Methode WebAssembly.instantiateStreaming() kompiliert und instanziiert ein WebAssembly-Modul direkt aus einer gestreamten zugrundeliegenden Quelle. Dies ist die effizienteste und optimierteste Methode, um Wasm-Code zu laden.

Hinweis: Webseiten, die eine strikte Content Security Policy (CSP) verwenden, könnten verhindern, dass WebAssembly-Module kompiliert und ausgeführt werden. Weitere Informationen zur Erlaubnis der Kompilierung und Ausführung von WebAssembly finden Sie in den 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, das die zugrundeliegende 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 z.B. Funktionen oder WebAssembly.Memory-Objekte. Es muss eine passende Eigenschaft für jeden deklarierten Import des kompilierten Moduls vorhanden sein, sonst wird ein WebAssembly.LinkError ausgelöst.

compileOptions Optional

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

builtins Optional

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

importedStringConstants Optional

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

Rückgabewert

Ein Promise, das mit einem ResultObject erfüllt wird, das zwei Felder enthält:

Ausnahmen

Beispiele

Streaming instanziieren

Das folgende Beispiel (sehen Sie sich unser instantiate-streaming.html Demo auf GitHub an, und sehen Sie es live an) streamt direkt ein Wasm-Modul aus einer zugrundeliegenden 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, und es wird die Antwort in die Funktion eingeben, 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-Instanzmitglied wird dann aufgerufen, und die enthaltene exportierte Funktion wird ausgeführt.

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

JavaScript Built-ins und globale Zeichenfolgenimporte aktivieren

Dieses Beispiel aktiviert JavaScript-String-Built-ins und importierte globale Zeichenfolgenkonstanten, wenn das Wasm-Modul mit instantiateStreaming() kompiliert und instanziiert wird, bevor die exportierte main() Funktion ausgeführt wird (die "hello world!" in die Konsole schreibt). Sehen Sie es live.

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