WebAssembly.Module() Konstruktor
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.
Ein WebAssembly.Module()
Konstruktor erstellt ein neues Modulobjekt, das zustandslosen WebAssembly-Code enthält, der bereits vom Browser kompiliert wurde und effizient mit Workers geteilt und mehrfach instanziiert werden kann.
Die WebAssembly.Module()
Konstruktorfunktion kann aufgerufen werden, um synchron gegebenen WebAssembly-Binärcode zu kompilieren. Der primäre Weg, um ein Module
zu erhalten, ist jedoch über eine asynchrone Kompilierungsfunktion wie WebAssembly.compile()
.
Hinweis: Webseiten mit strengen Content Security Policies (CSP) könnten die Kompilierung und Ausführung von WebAssembly-Modulen blockieren. Für weitere Informationen zur Erlaubnis der Kompilierung und Ausführung von WebAssembly, siehe die script-src CSP.
Syntax
Warnung:
Da die Kompilierung großer Module teuer sein kann, sollten Entwickler den Module()
Konstruktor nur verwenden, wenn eine synchrone Kompilierung absolut erforderlich ist; die asynchrone Methode WebAssembly.compileStreaming()
sollte in allen anderen Fällen verwendet werden.
new WebAssembly.Module(bufferSource)
new WebAssembly.Module(bufferSource, compileOptions)
Parameter
bufferSource
-
Ein Typed Array oder ArrayBuffer, das den Binärcode des zu kompilierenden Wasm-Moduls enthält.
compileOptions
Optional-
Ein Objekt mit Kompilierungsoptionen. Eigenschaften können beinhalten:
builtins
Optional-
Ein Array von Strings, das die Nutzung von JavaScript builtins im kompilierten Wasm-Modul ermöglicht. Die Strings definieren die gewünschten builtins. Derzeit ist nur der Wert
"js-string"
verfügbar, der JavaScript-String-builtins aktiviert. importedStringConstants
Optional-
Ein String, der einen Namensraum für importierte globale String-Konstanten angibt. Diese Eigenschaft muss spezifiziert werden, wenn importierte globale String-Konstanten im Wasm-Modul verwendet werden sollen.
Ausnahmen
- Wenn der Parameter nicht den richtigen Typ oder die richtige Struktur hat, wird ein
TypeError
ausgelöst. - Wenn die Kompilierung fehlschlägt, lehnt der Konstruktor mit einem
WebAssembly.CompileError
ab. - Einige Browser können eine
RangeError
auslösen, da sie die Kompilierung und Instanziierung von Wasm mit großen Buffern im UI-Thread verbieten.
Beispiele
Synchrone Kompilierung eines WebAssembly-Moduls
const importObject = {
my_namespace: {
imported_func(arg) {
console.log(arg);
},
},
};
function createWasmModule(bytes) {
return new WebAssembly.Module(bytes);
}
fetch("simple.wasm")
.then((response) => response.arrayBuffer())
.then((bytes) => {
const mod = createWasmModule(bytes);
WebAssembly.instantiate(mod, importObject).then((result) =>
result.exports.exported_func(),
);
});
Aktivieren von JavaScript Builtins und globalem String-Import
Dieses Beispiel aktiviert beim Kompilieren eines Wasm-Moduls über den Module()
Konstruktor JavaScript-String-builtins und importierte globale String-Konstanten, das dann mit instantiate()
instanziiert wird. Es wird dann die exportierte main()
Funktion aufgerufen, die "hello world!"
in die Konsole schreibt. Sehen Sie es live.
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) => {
const module = new WebAssembly.Module(bytes, compileOptions);
WebAssembly.instantiate(module, importObject).then((instance) =>
instance.exports.main(),
);
});
Spezifikationen
Specification |
---|
WebAssembly JavaScript Interface # dom-module-module |
Browser-Kompatibilität
BCD tables only load in the browser