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.
Die statische Methode WebAssembly.compileStreaming()
kompiliert ein WebAssembly.Module
direkt aus einer gestreamten zugrunde liegenden Quelle. Diese Funktion ist nützlich, wenn es notwendig ist, ein Modul zu kompilieren, 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 WebAssembly daran hindern, Module zu kompilieren und auszuführen. Für weitere Informationen darüber, wie Sie die WebAssembly-Kompilierung und -Ausführung erlauben, siehe die script-src CSP.
Syntax
WebAssembly.compileStreaming(source)
WebAssembly.compileStreaming(source, compileOptions)
Parameter
source
-
Ein
Response
-Objekt oder ein Versprechen, das mit einem erfüllt wird, das die zugrunde liegende Quelle eines Wasm-Moduls, das Sie streamen und kompilieren möchten, darstellt. compileOptions
Optional-
Ein Objekt, das Kompilierungsoptionen enthält. Eigenschaften können enthalten:
builtins
Optional-
Ein Array von Zeichenfolgen, das die Verwendung von JavaScript builtins im kompilierten Wasm-Modul ermöglicht. Die Zeichenfolgen definieren die builtins, die Sie aktivieren möchten. Derzeit ist der einzige verfügbare Wert
"js-string"
, der builtins für JavaScript-Zeichenfolgen aktiviert. importedStringConstants
Optional-
Eine Zeichenfolge, die einen Namensraum für importierte globale Zeichenfolgenkonstanten angibt. Diese Eigenschaft muss angegeben werden, wenn Sie importierte globale Zeichenfolgenkonstanten im Wasm-Modul verwenden möchten.
Rückgabewert
Ein Promise
, das auf ein WebAssembly.Module
-Objekt aufgelöst wird, das das kompilierte Modul darstellt.
Ausnahmen
- Wenn
source
keinResponse
oderPromise
ist, das zu einemResponse
aufgelöst wird, lehnt das Versprechen mit einemTypeError
ab. - Wenn die Kompilierung fehlschlägt, lehnt das Versprechen mit einem
WebAssembly.CompileError
ab. - Wenn das
source
-Versprechen abgelehnt wird, lehnt das Versprechen mit dem Fehler ab. - Wenn das
Result
dersource
-Anfrage einen Fehler hat (z. B. falscher MIME-Typ), lehnt das Versprechen mit einem Fehler ab.
Beispiele
Kompilieren während des Streamings
Das folgende Beispiel (siehe unser compile-streaming.html-Demo auf GitHub und sehen Sie es live) streamt direkt ein Wasm-Modul aus einer zugrunde liegenden Quelle und kompiliert es zu einem WebAssembly.Module
-Objekt. Da die Funktion compileStreaming()
ein Versprechen für ein Response
-Objekt akzeptiert, können Sie direkt ein Versprechen, das sich aus dem Aufruf von fetch()
ergibt, ohne auf die Erfüllung des Versprechens zu warten, übergeben.
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());
Die resultierende Modulinstanz wird dann mit WebAssembly.instantiate()
instanziiert und die exportierte Funktion aufgerufen.
Aktivierung von JavaScript-builtins und globalen Zeichenfolgenimporten
Dieses Beispiel aktiviert JavaScript-Zeichenfolgen-builtins und importierte globale Zeichenfolgenkonstanten, wenn das Wasm-Modul mit compileStreaming()
kompiliert wird, bevor es mit instantiate()
instanziiert wird, und führt dann die exportierte main()
-Funktion aus (die "hello world!"
in die Konsole protokolliert). 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