WebAssembly.compileStreaming()

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.compileStreaming() kompiliert ein WebAssembly.Module direkt aus einer gestreamten zugrundeliegenden Quelle. Diese Funktion ist nützlich, wenn es erforderlich ist, ein Modul zu kompilieren, bevor es instanziiert werden kann (ansonsten sollte die Funktion WebAssembly.instantiateStreaming() verwendet werden).

Hinweis: Webseiten, die eine strikte Content-Security-Policy (CSP) haben, könnten die Kompilierung und Ausführung von WebAssembly-Modulen blockieren. Weitere Informationen zur Erlaubnis von WebAssembly-Kompilierung und -Ausführung finden Sie unter script-src CSP.

Syntax

js
WebAssembly.compileStreaming(source)
WebAssembly.compileStreaming(source, compileOptions)

Parameter

source

Ein Response-Objekt oder ein Promise, das mit einem solchen erfüllt wird und die zugrundeliegende Quelle eines Wasm-Moduls darstellt, das Sie streamen und kompilieren möchten.

compileOptions Optional

Ein Objekt, das Kompilierungsoptionen enthält. 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 Builtins, die Sie aktivieren möchten. Derzeit ist der einzige verfügbare Wert "js-string", der JavaScript-String-Builtins aktiviert.

importedStringConstants Optional

Ein String, der einen Namensraum 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 WebAssembly.Module-Objekt aufgelöst wird, das das kompilierte Modul repräsentiert.

Ausnahmen

  • Wenn source kein Response oder Promise ist, das sich zu einem Response auflöst, wird das Promise mit einem TypeError abgelehnt.
  • Wenn die Kompilierung fehlschlägt, wird das Promise mit einem WebAssembly.CompileError abgelehnt.
  • Wenn das source-Promise abgelehnt wird, wird das Promise mit dem Fehler abgelehnt.
  • Wenn das source-Ergebnis einen Fehler hat (z.B. falscher MIME-Typ), wird das Promise mit einem Fehler abgelehnt.

Beispiele

Streaming kompilieren

Das folgende Beispiel (siehe unser compile-streaming.html-Demo auf GitHub und sehen Sie es live) streamt direkt ein Wasm-Modul aus einer zugrundeliegenden Quelle und kompiliert es zu einem WebAssembly.Module-Objekt. Da die Funktion compileStreaming() ein Promise für ein Response-Objekt akzeptiert, können Sie direkt ein Promise aus dem Aufruf von fetch() übergeben, ohne auf die Erfüllung des Promises zu warten.

js
const importObject = {
  my_namespace: { imported_func: (arg) => console.log(arg) },
};

WebAssembly.compileStreaming(fetch("simple.wasm"))
  .then((module) => WebAssembly.instantiate(module, importObject))
  .then((instance) => instance.exports.exported_func());

Die resultierende Modulinstanz wird dann mit WebAssembly.instantiate() instanziiert, und die exportierte Funktion wird aufgerufen.

JavaScript-Builtins und globale String-Importe aktivieren

Dieses Beispiel aktiviert JavaScript-String-Builtins und importierte globale String-Konstanten, wenn das Wasm-Modul mit compileStreaming() kompiliert wird, bevor es mit instantiate() instanziiert und dann die exportierte main()-Funktion ausgeführt wird (die "hello world!" in die Konsole protokolliert). 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.compileStreaming(fetch("log-concat.wasm"), compileOptions)
  .then((module) => WebAssembly.instantiate(module, importObject))
  .then((instance) => instance.exports.main());

Spezifikationen

Specification
WebAssembly Web API
# dom-webassembly-compilestreaming

Browser-Kompatibilität

Siehe auch