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 es notwendig ist, ein Modul zu kompilieren, bevor es instanziiert werden kann (ansonsten sollte die Funktion WebAssembly.instantiate() verwendet werden).

Hinweis: Webseiten, die eine strikte Content Security Policy (CSP) haben, könnten WebAssembly daran hindern, Module zu kompilieren und auszuführen. Für mehr Informationen zur Erlaubnis der WebAssembly-Kompilierung und -Ausführung, siehe 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 Wasm-Moduls enthält, das Sie kompilieren möchten.

compileOptions Optional

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

builtins Optional

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

importedStringConstants Optional

Eine Zeichenfolge, die einen Namensraum für importierte globale Zeichenfolgenkonstanten angibt. Diese Eigenschaft muss angegeben werden, wenn Sie importierte globale Zeichenfolgenkonstanten 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

Beispiele

Verwendung von compile

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

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.

JavaScript builtins und globale Zeichenfolgenimporte aktivieren

Dieses Beispiel aktiviert JavaScript-String-builtins und importierte globale Zeichenfolgenkonstanten, 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). Sehen 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