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 zugrunde liegenden Quelle. Diese Funktion ist nützlich, wenn ein Modul kompiliert werden muss, bevor es instanziiert werden kann (andernfalls 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 darüber, wie Sie die Kompilierung und Ausführung von WebAssembly erlauben können, 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 erfüllt wird, das die zugrunde liegende Quelle eines gestreamten und zu kompilierenden Wasm-Moduls darstellt.

compileOptions Optional

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

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 Namespace für importierte globale Stringkonstanten spezifiziert. Diese Eigenschaft muss angegeben werden, wenn Sie importierte globale Stringkonstanten im Wasm-Modul verwenden möchten.

Rückgabewert

Ein Promise, das sich zu einem WebAssembly.Module-Objekt auflöst, das das kompilierte Modul darstellt.

Ausnahmen

  • Wenn source kein Response-Objekt oder ein 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 ein Promise ist, das abgelehnt wird, wird das Promise mit dem Fehler abgelehnt.
  • Wenn das Result der source einen Fehler hat (z.B. schlechter MIME-Typ), wird das Promise mit einem Fehler abgelehnt.

Beispiele

Kompilierung im Stream

Das folgende Beispiel (siehe unser compile-streaming.html-Demo auf GitHub und sehen Sie es live auch) streamt ein Wasm-Modul direkt aus einer zugrunde liegenden Quelle und kompiliert es dann zu einem WebAssembly.Module-Objekt. Da die compileStreaming()-Funktion ein Promise für ein Response-Objekt akzeptiert, können Sie ihr direkt ein Promise aus dem Aufruf von fetch() übergeben, ohne darauf zu warten, dass das Promise erfüllt wird.

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());

Das resultierende Modul 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 Stringkonstanten, wenn das Wasm-Modul mit compileStreaming() kompiliert wird, bevor es mit instantiate() instanziiert und dann die exportierte Funktion main() 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.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

BCD tables only load in the browser

Siehe auch