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.

Die statische Methode WebAssembly.compile() kompiliert WebAssembly-Binärcode in ein WebAssembly.Module-Objekt. Diese Funktion ist nützlich, wenn es notwendig ist, ein Modul zu kompilieren, 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 verhindern, dass WebAssembly-Module kompiliert und ausgeführt werden. Für weitere Informationen darüber, wie Sie die Kompilierung und Ausführung von WebAssembly erlauben können, lesen Sie die 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 beinhalten:

builtins Optional

Ein Array mit einem oder mehreren Strings, das die Nutzung von JavaScript-builtin-Funktionen im kompilierten Wasm-Modul ermöglicht. Die Strings definieren die zu aktivierenden builtins. Derzeit ist der einzige verfügbare Wert "js-string", welcher JavaScript-String-builtin-Funktionen aktiviert.

importedStringConstants Optional

Ein String, der einen Namensraum für importierte globale String-Konstanten definiert. Diese Eigenschaft muss angegeben werden, wenn Sie importierte globale String-Konstanten im Wasm-Modul verwenden möchten.

Rückgabewert

Ein Promise, das auf ein WebAssembly.Module-Objekt auflöst, das das kompilierte Modul repräsentiert.

Ausnahmen

Beispiele

Verwendung von compile

Im folgenden Beispiel wird der geladene einfache Wasm-Bytecode mit der compile()-Funktion 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 möchten Sie wahrscheinlich WebAssembly.compileStreaming() verwenden, da es effizienter ist als compile().

Aktivieren von JavaScript builtins und globalen String-Imports

In diesem Beispiel werden JavaScript-String-builtin-Funktionen und importierte globale String-Konstanten aktiviert, wenn das Wasm-Modul mit compile() kompiliert wird, bevor es mit instantiate() instanziiert und dann die exportierte main()-Funktion (die "hello world!" in die Konsole loggt) ausgeführt wird. Lassen Sie es live laufen.

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

BCD tables only load in the browser

Siehe auch