WebAssembly.compileStreaming()
Baseline
Weitgehend verfügbar
*
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2021 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Die statische Methode WebAssembly.compileStreaming() kompiliert ein WebAssembly.Module direkt aus einer gestreamten Datenquelle.
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 mit einer strikten Content Security Policy (CSP) können das Kompilieren und Ausführen von WebAssembly-Modulen blockieren. Weitere Informationen dazu, wie Sie die Kompilierung und Ausführung von WebAssembly zulassen, 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 solchen Objekt erfüllt wird. Es stellt die Datenquelle eines Wasm-Moduls dar, das Sie streamen und kompilieren möchten. compileOptionsOptional-
Ein Objekt mit Kompilierungsoptionen. Es kann folgende Eigenschaften enthalten:
builtinsOptional-
Ein Array von Strings, das die Verwendung von JavaScript-Builtins im kompilierten Wasm-Modul ermöglicht. Die Strings legen fest, welche Builtins aktiviert werden sollen. Derzeit ist nur der Wert
"js-string"verfügbar, der JavaScript-String-Builtins aktiviert. importedStringConstantsOptional-
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.
Rückgabewert
Ein Promise, das zu einem WebAssembly.Module-Objekt aufgelöst wird, welches das kompilierte Modul darstellt.
Ausnahmen
- Wenn
sourceweder eineResponsenoch einPromiseist, das zu einerResponseaufgelöst wird, wird das Promise mit einemTypeErrorabgelehnt. - Wenn die Kompilierung fehlschlägt, wird das Promise mit einem
WebAssembly.CompileErrorabgelehnt. - Wenn
sourceeinPromiseist, das abgelehnt wird, wird das Promise mit demselben Fehler abgelehnt. - Wenn die Antwort einen falschen MIME-Typ hat (anstelle von
application/wasm), wird das Promise mit einemTypeErrorabgelehnt. - Wenn das Verarbeiten des Antwort-Bodys fehlschlägt, wird das Promise mit dem entsprechenden Fehler abgelehnt.
Beispiele
>Streaming-Kompilierung
Das folgende Beispiel (siehe auch unsere Demo compile-streaming.html auf GitHub und die Live-Demo) streamt ein Wasm-Modul direkt aus einer Datenquelle und kompiliert es anschließend zu einem WebAssembly.Module-Objekt. Da die Funktion compileStreaming() ein Promise für ein Response-Objekt akzeptiert, können Sie ihr direkt das von fetch() zurückgegebene Promise übergeben, ohne auf dessen Erfüllung zu warten.
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 anschließend mit WebAssembly.instantiate() instanziiert und die exportierte Funktion aufgerufen.
JavaScript-Builtins und globale String-Importe aktivieren
Dieses Beispiel aktiviert JavaScript-String-Builtins und importierte globale String-Konstanten, während das Wasm-Modul mit compileStreaming() kompiliert wird. Anschließend wird es mit instantiate() instanziiert und die exportierte Funktion main() ausgeführt, die "hello world!" in der Konsole ausgibt. Sehen Sie sich die Live-Demo an.
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
| Spezifikation |
|---|
| WebAssembly Web API> # dom-webassembly-compilestreaming> |