WebAssembly.compile()

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.compile() kompiliert WebAssembly-Binärcode in ein WebAssembly.Module-Objekt. Diese Funktion ist nützlich, wenn ein Modul kompiliert werden muss, bevor es instanziiert werden kann (andernfalls sollte die Funktion WebAssembly.instantiate() verwendet werden).

Hinweis: Webseiten, die eine strikte Content Security Policy (CSP) haben, könnten das Kompilieren und Ausführen von WebAssembly-Modulen blockieren. Weitere Informationen zum Zulassen der WebAssembly-Kompilierung und -Ausführung finden Sie unter dem script-src CSP.

Syntax

js
WebAssembly.compile(bufferSource)
WebAssembly.compile(bufferSource, compileOptions)

Parameter

bufferSource

Ein typisiertes Array oder ArrayBuffer, das den Binärcode des zu kompilierenden Wasm-Moduls enthält.

compileOptions Optional

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

builtins Optional

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

importedStringConstants Optional

Eine Zeichenfolge, die 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 sich zu einem WebAssembly.Module-Objekt auflöst und das kompilierte Modul darstellt.

Ausnahmen

Beispiele

Verwendung von compile

Im folgenden Beispiel wird der geladene einfache Wasm-Bytecode mit der Funktion compile() kompiliert und dann mit postMessage() an einen Worker gesendet.

js
const worker = new Worker("wasm_worker.js");

fetch("simple.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => WebAssembly.compile(bytes))
  .then((mod) => worker.postMessage(mod));

Hinweis: In den meisten Fällen werden Sie vermutlich WebAssembly.compileStreaming() verwenden wollen, da es effizienter als compile() ist.

Aktivieren von JavaScript-Builtins und globalen String-Importen

Dieses Beispiel aktiviert JavaScript-String-Builtins und importierte globale String-Konstanten, wenn das Wasm-Modul mit compile() kompiliert wird, bevor es mit instantiate() instanziiert und anschließend die exportierte main()-Funktion (die "hello world!" auf die Konsole schreibt) ausgeführt wird. Siehe es live in Aktion.

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
};

fetch("log-concat.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => WebAssembly.compile(bytes, compileOptions))
  .then((module) => WebAssembly.instantiate(module, importObject))
  .then((instance) => instance.exports.main());

Spezifikationen

Specification
WebAssembly JavaScript Interface
# dom-webassembly-compile

Browser-Kompatibilität

Siehe auch