Baseline Widely available *
Die statische Methode WebAssembly.instantiate()
ermöglicht es Ihnen, WebAssembly-Code zu kompilieren und zu instantiieren. Diese Funktion hat zwei Ãberladungen:
ArrayBuffer
und führt sowohl die Kompilierung als auch die Instantiierung in einem Schritt aus. Das zurückgegebene Promise
wird auf ein kompilertes WebAssembly.Module
und dessen erstes WebAssembly.Instance
aufgelöst.WebAssembly.Module
und gibt ein Promise
zurück, das auf eine Instance
dieses Modules
aufgelöst wird. Diese Ãberladung ist nützlich, wenn das Module
bereits kompiliert wurde.Warnung: Diese Methode ist nicht der effizienteste Weg, um Wasm-Module abzurufen und zu instantiieren. Wenn möglich, sollten Sie stattdessen die neuere Methode WebAssembly.instantiateStreaming()
verwenden, die ein Modul in einem Schritt direkt aus dem Roh-Bytecode abruft, kompiliert und instanziiert, sodass keine Umwandlung in einen ArrayBuffer
erforderlich ist.
// Taking Wasm binary code
WebAssembly.instantiate(bufferSource)
WebAssembly.instantiate(bufferSource, importObject)
WebAssembly.instantiate(bufferSource, importObject, compileOptions)
// Taking a module object instance
WebAssembly.instantiate(module)
WebAssembly.instantiate(module, importObject)
WebAssembly.instantiate(module, importObject, compileOptions)
Parameter
bufferSource
Ein Typed Array oder ArrayBuffer
, das den Binärcode des zu kompilierenden Wasm-Moduls enthält.
module
Das zu instanziierende WebAssembly.Module
Objekt.
importObject
Optional
Ein Objekt, das die in die neu erstellte Instance
zu importierenden Werte enthält, wie z. B. Funktionen oder WebAssembly.Memory
Objekte. Für jeden deklarierten Import des kompilierten Moduls muss eine passende Eigenschaft vorhanden sein, sonst wird ein WebAssembly.LinkError
ausgelöst.
compileOptions
Optional
Ein Objekt, das Kompilierungsoptionen enthält. Die Eigenschaften können umfassen:
builtins
Optional
Ein Array von Strings, das die Nutzung von JavaScript builtins im kompilierten Wasm-Modul aktiviert. 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 Namespace für importierte globale String-Konstanten angibt. Diese Eigenschaft muss angegeben werden, wenn Sie importierte globale String-Konstanten im Wasm-Modul verwenden möchten.
Wenn ein bufferSource
übergeben wird, wird ein Promise
zurückgegeben, das auf ein ResultObject
aufgelöst wird, das zwei Felder enthält:
module
: Ein WebAssembly.Module
Objekt, das das kompilierte WebAssembly-Modul darstellt. Dieses Module
kann erneut instanziiert, über postMessage()
geteilt oder zwischengespeichert werden.instance
: Ein WebAssembly.Instance
Objekt, das alle Exportierten WebAssembly-Funktionen enthält.Wenn ein module
übergeben wird, gibt es ein Promise
zurück, das auf ein WebAssembly.Instance
Objekt aufgelöst wird.
TypeError
abgelehnt.WebAssembly.CompileError
, WebAssembly.LinkError
oder WebAssembly.RuntimeError
abgelehnt.Hinweis: In den meisten Fällen möchten Sie wahrscheinlich WebAssembly.instantiateStreaming()
verwenden, da es effizienter ist als instantiate()
.
Nach dem Abrufen einiger WebAssembly-Bytecode mit fetch kompilieren und instantiieren wir das Modul mit der WebAssembly.instantiate()
Funktion und importieren dabei eine JavaScript-Funktion in das WebAssembly-Modul. Dann rufen wir eine Exportierte WebAssembly-Funktion auf, die von der Instance
exportiert wird.
const importObject = {
my_namespace: {
imported_func(arg) {
console.log(arg);
},
},
};
fetch("simple.wasm")
.then((response) => response.arrayBuffer())
.then((bytes) => WebAssembly.instantiate(bytes, importObject))
.then((result) => result.instance.exports.exported_func());
Hinweis: Sie können dieses Beispiel auch auf index.html auf GitHub finden (sehen Sie es auch live).
Beispiel der zweiten ÃberladungDas folgende Beispiel (siehe unser index-compile.html Demo auf GitHub und sehen Sie es live auch) kompiliert den geladenen simple.wasm Bytecode mit der Methode WebAssembly.compileStreaming()
und sendet ihn dann an einen Worker unter Verwendung von postMessage()
.
const worker = new Worker("wasm_worker.js");
WebAssembly.compileStreaming(fetch("simple.wasm")).then((mod) =>
worker.postMessage(mod),
);
Im Worker (siehe wasm_worker.js
) definieren wir ein Importobjekt für das Modul zur Verwendung und richten dann einen Ereignishandler ein, um das Modul vom Hauptthread zu empfangen. Wenn das Modul empfangen wird, erstellen wir eine Instanz davon mit der WebAssembly.instantiate()
Methode und rufen eine darin exportierte Funktion auf.
const importObject = {
my_namespace: {
imported_func(arg) {
console.log(arg);
},
},
};
onmessage = (e) => {
console.log("module received from main thread");
const mod = e.data;
WebAssembly.instantiate(mod, importObject).then((instance) => {
instance.exports.exported_func();
});
};
Aktivieren von JavaScript-Builtins und globalen String-Importen
Dieses Beispiel aktiviert JavaScript-String-Builtins und importierte globale String-Konstanten beim Kompilieren und Instantiieren des Wasm-Moduls mit instantiate()
, bevor es die exportierte main()
Funktion ausführt (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) => WebAssembly.instantiate(bytes, importObject, compileOptions))
.then((result) => result.instance.exports.main());
Spezifikationen Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4