WebAssembly.instantiateStreaming()
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.
Die statische Methode WebAssembly.instantiateStreaming()
kompiliert und instanziiert ein WebAssembly-Modul direkt aus einer gestreamten zugrundeliegenden Quelle. Dies ist die effizienteste und optimierteste Methode, um Wasm-Code zu laden.
Hinweis: Webseiten, die eine strikte Content Security Policy (CSP) verwenden, könnten verhindern, dass WebAssembly-Module kompiliert und ausgeführt werden. Weitere Informationen zur Erlaubnis der Kompilierung und Ausführung von WebAssembly finden Sie in den script-src CSP.
Syntax
WebAssembly.instantiateStreaming(source)
WebAssembly.instantiateStreaming(source, importObject)
WebAssembly.instantiateStreaming(source, importObject, compileOptions)
Parameter
source
-
Ein
Response
-Objekt oder ein Versprechen, das mit einem solchen erfüllt wird, das die zugrundeliegende Quelle eines Wasm-Moduls darstellt, das Sie streamen, kompilieren und instanziieren möchten. importObject
Optional-
Ein Objekt, das die Werte enthält, die in die neu erstellte
Instance
importiert werden sollen, wie z.B. Funktionen oderWebAssembly.Memory
-Objekte. Es muss eine passende Eigenschaft für jeden deklarierten Import des kompilierten Moduls vorhanden sein, sonst wird einWebAssembly.LinkError
ausgelöst. compileOptions
Optional-
Ein Objekt, das die Kompilierungsoptionen enthält. Eigenschaften können umfassen:
builtins
Optional-
Ein Array von Zeichenfolgen, das die Verwendung von JavaScript Built-ins im kompilierten Wasm-Modul ermöglicht. Die Zeichenfolgen definieren die Built-ins, die Sie aktivieren möchten. Derzeit ist der einzige verfügbare Wert
"js-string"
, der JavaScript-String-Built-ins aktiviert. importedStringConstants
Optional-
Eine Zeichenfolge, die einen Namensraum für importierte globale Zeichenfolgenkonstanten spezifiziert. Diese Eigenschaft muss angegeben werden, wenn Sie importierte globale Zeichenfolgenkonstanten im Wasm-Modul verwenden möchten.
Rückgabewert
Ein Promise
, das mit einem ResultObject
erfüllt wird, das zwei Felder enthält:
module
: EinWebAssembly.Module
-Objekt, das das kompilierte WebAssembly-Modul darstellt. DiesesModule
kann erneut instanziiert oder über postMessage() geteilt werden.instance
: EinWebAssembly.Instance
-Objekt, das alle Exportierten WebAssembly-Funktionen enthält.
Ausnahmen
- Wenn einer der Parameter nicht den richtigen Typ oder die richtige Struktur hat, wird ein
TypeError
ausgelöst. - Wenn die Operation fehlschlägt, schlägt das Versprechen mit einem
WebAssembly.CompileError
,WebAssembly.LinkError
oderWebAssembly.RuntimeError
fehl, je nach Ursache des Fehlers.
Beispiele
Streaming instanziieren
Das folgende Beispiel (sehen Sie sich unser instantiate-streaming.html Demo auf GitHub an, und sehen Sie es live an)
streamt direkt ein Wasm-Modul aus einer zugrundeliegenden Quelle, kompiliert es und instanziiert es, wobei das Versprechen mit einem ResultObject
erfüllt wird. Da die Funktion instantiateStreaming()
ein Versprechen für ein Response
-Objekt akzeptiert, können Sie direkt einen fetch()
Aufruf übergeben, und es wird die Antwort in die Funktion eingeben, wenn es erfüllt wird.
const importObject = {
my_namespace: { imported_func: (arg) => console.log(arg) },
};
WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
Das ResultObject
-Instanzmitglied wird dann aufgerufen, und die enthaltene exportierte Funktion wird ausgeführt.
Hinweis:
Damit dies funktioniert, sollten .wasm
-Dateien vom Server mit einem application/wasm
MIME-Typ zurückgegeben werden.
JavaScript Built-ins und globale Zeichenfolgenimporte aktivieren
Dieses Beispiel aktiviert JavaScript-String-Built-ins und importierte globale Zeichenfolgenkonstanten, wenn das Wasm-Modul mit instantiateStreaming()
kompiliert und instanziiert wird, bevor die exportierte main()
Funktion ausgeführt wird (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
};
WebAssembly.instantiateStreaming(
fetch("log-concat.wasm"),
importObject,
compileOptions,
).then((result) => result.instance.exports.main());
Spezifikationen
Specification |
---|
WebAssembly Web API # dom-webassembly-instantiatestreaming |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- WebAssembly Übersichtsseite
- WebAssembly-Konzepte
- Verwendung der WebAssembly-JavaScript-API