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 WebAssembly.compile() statische Methode 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 (ansonsten sollte die WebAssembly.instantiate()-Funktion 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 von WebAssembly-Kompilierung und -Ausführung finden Sie unter script-src CSP.

Syntax

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

Parameter

bufferSource

Ein getypedetes 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 umfassen:

builtins Optional

Ein Array von einem oder mehreren 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

Beispiele

Verwendung von compile

Das folgende Beispiel kompiliert den geladenen simple.wasm Bytecode mit der compile()-Funktion und sendet ihn dann mit postMessage() an einen Worker.

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 als compile() ist.

Aktivieren von JavaScript Builtins und globalen String-Imports

In diesem Beispiel werden JavaScript-String-Builtins und importierte globale String-Konstanten aktiviert, wenn das Wasm-Modul mit compile() kompiliert wird, bevor es mit instantiate() instanziiert wird, und dann die exportierte main()-Funktion ausgeführt wird (die "hello world!" in die Konsole protokolliert). Siehe 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
};

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