| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/WebAssembly/Reference/JavaScript_interface/instantiate_static | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Oktober 2017 browserbergreifend verfgbar.
* Einige Teile dieser Funktion werden mglicherweise unterschiedlich gut untersttzt.
Die statische Methode WebAssembly.instantiate() ermglicht es Ihnen, WebAssembly-Code zu kompilieren und zu instanziieren. Diese Funktion hat zwei berladungen:
ArrayBuffer, und fhrt sowohl die Kompilierung als auch die Instanzierung in einem Schritt durch. Das zurckgegebene Promise lst sich sowohl in ein kompilierbares WebAssembly.Module als auch in seine erste WebAssembly.Instance auf.WebAssembly.Module entgegen und gibt ein Promise zurck, das sich in eine Instance dieses Module auflst. Diese berladung ist ntzlich, wenn das Module bereits kompiliert wurde.Warnung:
Diese Methode ist nicht der effizienteste Weg, um Wasm-Module abzurufen und zu instanziieren. Wenn mglich, sollten Sie die neuere Methode WebAssembly.instantiateStreaming() verwenden, die ein Modul in einem Schritt direkt aus dem Rohbytecode abruft, kompiliert und instanziiert und somit keine Umwandlung in einen ArrayBuffer erfordert.
// 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)
bufferSourceEin typisiertes Array oder ein ArrayBuffer, das den Binrcode des zu kompilierenden Wasm-Moduls enthlt.
moduleDas WebAssembly.Module-Objekt, das instanziiert werden soll.
importObject OptionalEin Objekt, das die Werte enthlt, die in die neu erstellte Instance importiert werden sollen, wie z.B. Funktionen oder WebAssembly.Memory-Objekte. Es muss fr jeden deklarierten Import des kompilierten Moduls eine passende Eigenschaft geben, andernfalls wird ein WebAssembly.LinkError ausgelst.
compileOptions OptionalEin Objekt, das Kompilierungsoptionen enthlt. Eigenschaften knnen beinhalten:
builtins OptionalEin Array von Strings, das die Verwendung von JavaScript-Builtins im kompilierten Wasm-Modul ermglicht. Die Strings definieren die Builtins, die Sie aktivieren mchten. Derzeit ist der einzige verfgbare Wert "js-string", der JavaScript-String-Builtins aktiviert.
importedStringConstants OptionalEin String, der einen Namensraum fr importierte globale String-Konstanten angibt. Diese Eigenschaft muss angegeben werden, wenn Sie importierte globale String-Konstanten im Wasm-Modul verwenden mchten.
Wird ein bufferSource bergeben, gibt es ein Promise zurck, das sich in ein ResultObject auflst, das zwei Felder enthlt:
module: Ein WebAssembly.Module-Objekt, das das kompilierte WebAssembly-Modul reprsentiert. Dieses Module kann erneut instanziiert, ber postMessage() geteilt oder zwischengespeichert werden.instance: Ein WebAssembly.Instance-Objekt, das alle exportierten WebAssembly-Funktionen enthlt.Wird ein module bergeben, gibt es ein Promise zurck, das sich in ein WebAssembly.Instance-Objekt auflst.
TypeError abgelehnt.WebAssembly.CompileError, WebAssembly.LinkError oder WebAssembly.RuntimeError abgelehnt, abhngig von der Ursache des Fehlers.Hinweis:
In den meisten Fllen mchten Sie wahrscheinlich WebAssembly.instantiateStreaming() verwenden, da es effizienter ist als instantiate().
Nach dem Abrufen einiger WebAssembly-Bytes mit fetch, kompilieren und instanziieren wir das Modul mit der Funktion WebAssembly.instantiate(), indem wir eine JavaScript-Funktion im Prozess in das WebAssembly-Modul importieren. Danach rufen wir eine exportierte WebAssembly-Funktion auf, die von der Instance exportiert wurde.
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: Dieses Beispiel finden Sie auch unter index.html auf GitHub (sehen Sie es auch live).
Das 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 mit 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 Import-Objekt, das das Modul verwenden soll, und richten dann einen Ereignishandler ein, um das Modul vom Hauptthread zu empfangen. Wenn das Modul empfangen wird, erstellen wir eine Instanz daraus mit der Methode WebAssembly.instantiate() und rufen eine exportierte Funktion aus diesem 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();
});
};
Dieses Beispiel aktiviert JavaScript-String-Builtins und importierte globale String-Konstanten beim Kompilieren und Instanziieren des Wasm-Moduls mit instantiate(), bevor die exportierte main()-Funktion ausgefhrt wird (die "hello world!" in die Konsole protokolliert). Sehen Sie es live laufen.
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());
| Spezifikation |
|---|
| WebAssembly JavaScript Interface # dom-webassembly-instantiate |
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |