Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

WebAssembly.compileStreaming()

Baseline
Weitgehend verfügbar
*

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2021 browserübergreifend verfügbar.

* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.

Die statische Methode WebAssembly.compileStreaming() kompiliert ein WebAssembly.Module direkt aus einer gestreamten Datenquelle. 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 mit einer strikten Content Security Policy (CSP) können das Kompilieren und Ausführen von WebAssembly-Modulen blockieren. Weitere Informationen dazu, wie Sie die Kompilierung und Ausführung von WebAssembly zulassen, 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 Objekt erfüllt wird. Es stellt die Datenquelle eines Wasm-Moduls dar, das Sie streamen und kompilieren möchten.

compileOptions Optional

Ein Objekt mit Kompilierungsoptionen. Es kann folgende Eigenschaften enthalten:

builtins Optional

Ein Array von Strings, das die Verwendung von JavaScript-Builtins im kompilierten Wasm-Modul ermöglicht. Die Strings legen fest, welche Builtins aktiviert werden sollen. Derzeit ist nur der Wert "js-string" verfügbar, 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 WebAssembly.Module-Objekt aufgelöst wird, welches das kompilierte Modul darstellt.

Ausnahmen

  • Wenn source weder eine Response noch ein Promise ist, das zu einer Response aufgelöst wird, wird das Promise mit einem TypeError abgelehnt.
  • Wenn die Kompilierung fehlschlägt, wird das Promise mit einem WebAssembly.CompileError abgelehnt.
  • Wenn source ein Promise ist, das abgelehnt wird, wird das Promise mit demselben Fehler abgelehnt.
  • Wenn die Antwort einen falschen MIME-Typ hat (anstelle von application/wasm), wird das Promise mit einem TypeError abgelehnt.
  • Wenn das Verarbeiten des Antwort-Bodys fehlschlägt, wird das Promise mit dem entsprechenden Fehler abgelehnt.

Beispiele

Streaming-Kompilierung

Das folgende Beispiel (siehe auch unsere Demo compile-streaming.html auf GitHub und die Live-Demo) streamt ein Wasm-Modul direkt aus einer Datenquelle und kompiliert es anschließend zu einem WebAssembly.Module-Objekt. Da die Funktion compileStreaming() ein Promise für ein Response-Objekt akzeptiert, können Sie ihr direkt das von fetch() zurückgegebene Promise übergeben, ohne auf dessen Erfüllung 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());

Das resultierende Modul wird anschließend mit WebAssembly.instantiate() instanziiert und die exportierte Funktion aufgerufen.

JavaScript-Builtins und globale String-Importe aktivieren

Dieses Beispiel aktiviert JavaScript-String-Builtins und importierte globale String-Konstanten, während das Wasm-Modul mit compileStreaming() kompiliert wird. Anschließend wird es mit instantiate() instanziiert und die exportierte Funktion main() ausgeführt, die "hello world!" in der Konsole ausgibt. Sehen Sie sich die Live-Demo an.

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

Spezifikation
WebAssembly Web API
# dom-webassembly-compilestreaming

Browser-Kompatibilität

Siehe auch