WebAssembly.compileStreaming()
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.compileStreaming()
kompiliert ein WebAssembly.Module
direkt aus einer gestreamten zugrunde liegenden Quelle. Diese Funktion ist nützlich, wenn ein Modul kompiliert werden muss, bevor es instanziiert werden kann (andernfalls sollte die Funktion WebAssembly.instantiateStreaming()
verwendet werden).
Hinweis: Webseiten, die eine strikte Content Security Policy (CSP) haben, könnten die Kompilierung und Ausführung von WebAssembly-Modulen blockieren. Weitere Informationen darüber, wie Sie die Kompilierung und Ausführung von WebAssembly erlauben können, finden Sie unter script-src CSP.
Syntax
WebAssembly.compileStreaming(source)
WebAssembly.compileStreaming(source, compileOptions)
Parameter
source
-
Ein
Response
-Objekt oder ein Promise, das mit einem erfüllt wird, das die zugrunde liegende Quelle eines gestreamten und zu kompilierenden Wasm-Moduls darstellt. compileOptions
Optional-
Ein Objekt, das Kompilierungsoptionen enthält. Die Eigenschaften können enthalten:
builtins
Optional-
Ein Array von Strings, das die Verwendung von JavaScript builtins im kompilierten Wasm-Modul ermöglicht. 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 Stringkonstanten spezifiziert. Diese Eigenschaft muss angegeben werden, wenn Sie importierte globale Stringkonstanten 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
- Wenn
source
keinResponse
-Objekt oder ein Promise ist, das sich zu einemResponse
auflöst, wird das Promise mit einemTypeError
abgelehnt. - Wenn die Kompilierung fehlschlägt, wird das Promise mit einem
WebAssembly.CompileError
abgelehnt. - Wenn das
source
ein Promise ist, das abgelehnt wird, wird das Promise mit dem Fehler abgelehnt. - Wenn das
Result
dersource
einen Fehler hat (z.B. schlechter MIME-Typ), wird das Promise mit einem Fehler abgelehnt.
Beispiele
Kompilierung im Stream
Das folgende Beispiel (siehe unser compile-streaming.html-Demo auf GitHub und sehen Sie es live auch) streamt ein Wasm-Modul direkt aus einer zugrunde liegenden Quelle und kompiliert es dann zu einem WebAssembly.Module
-Objekt. Da die compileStreaming()
-Funktion ein Promise für ein Response
-Objekt akzeptiert, können Sie ihr direkt ein Promise
aus dem Aufruf von fetch()
übergeben, ohne darauf zu warten, dass das Promise erfüllt wird.
const importObject = {
my_namespace: { imported_func: (arg) => console.log(arg) },
};
WebAssembly.compileStreaming(fetch("simple.wasm"))
.then((module) => WebAssembly.instantiate(module, importObject))
.then((instance) => instance.exports.exported_func());
Das resultierende Modul wird dann mit WebAssembly.instantiate()
instanziiert, und die exportierte Funktion wird aufgerufen.
JavaScript Builtins und globale String-Importe aktivieren
Dieses Beispiel aktiviert JavaScript-String-builtins und importierte globale Stringkonstanten, wenn das Wasm-Modul mit compileStreaming()
kompiliert wird, bevor es mit instantiate()
instanziiert und dann die exportierte Funktion main()
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.compileStreaming(fetch("log-concat.wasm"), compileOptions)
.then((module) => WebAssembly.instantiate(module, importObject))
.then((instance) => instance.exports.main());
Spezifikationen
Specification |
---|
WebAssembly Web API # dom-webassembly-compilestreaming |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- WebAssembly Übersichtsseite
- WebAssembly-Konzepte
- Verwendung der WebAssembly JavaScript API