Ein WebImage-Artefakt mit backend = "wasm-gc" kompiliert Java oder Kotlin zu WasmGC: einem
WebAssembly-Modul, dessen Objekte im Garbage-Collected-Heap des Browsers liegen, plus einem JavaScript-Loader, der es
abruft und startet. Wie Sie eine vorhandene .wasm-Datei mit Elide ausführen, steht unter
WebAssembly.
Voraussetzungen
- Binaryen 119 oder neuer, mit
wasm-asimPATHzur Build-Zeit. - Code, der die Anforderungen von Native Image erfüllt: Reachability-Metadaten für Reflection, Ressourcen und Proxys; keine nativen Abhängigkeiten.
Bauen
hello-wasm/
elide.pkl
src/main/java/Hello.javapublic class Hello {
public static void main(String[] args) {
System.out.println("Hello from WasmGC");
}
}amends "elide:project.pkl"
import "elide:Jvm.pkl" as jvm
import "elide:NativeImage.pkl" as nativeImage
name = "hello-wasm"
artifacts {
["app-jar"] = new jvm.Jar {
sources { "main" }
}
["web"] = new nativeImage.WebImage {
from { "app-jar" }
name = "hello"
entrypoint = "Hello"
backend = "wasm-gc"
runtime = "browser"
}
}elide buildDie Ausgabe landet in .dev/artifacts/native-image/:
| Datei | Ausliefern | Größe bei Hello World |
|---|---|---|
hello.js | Ja: der Loader. | 110 KB |
hello.js.wasm | Ja: das Modul. | 1,3 MB (480 KB mit gzip) |
hello.js.wat | Nein: Textform, zur Inspektion. | 32 MB |
hello.js.map | Optional: wird mit sourceMap = true erzeugt. |
| Eigenschaft | Wert für den Browser |
|---|---|
backend | "wasm-gc" (der Standard). |
runtime | "browser", oder "generic", um Node-Unterstützung im selben Loader zu behalten. |
autoRun | true (Standard) führt main aus, sobald hello.js geladen ist. |
Weitere Eigenschaften und Compiler-Optionen: WebImage.
In einer Seite laden
Legen Sie index.html neben das Bundle:
<!doctype html>
<html lang="en">
<meta charset="utf-8" />
<title>Hello WasmGC</title>
<body>
<script src="./hello.js"></script>
</body>
</html>elide dev --no-tui --port 8000 .dev/artifacts/native-imageÖffnen Sie http://localhost:8000/; Hello from WasmGC erscheint in der Browser-Konsole.
- Der Loader fordert das Modul unter seiner eigenen URL plus
.wasman; halten Siehello.jsundhello.js.wasmdaher im selben Verzeichnis. - Laden Sie ihn mit einem klassischen
<script>. Mittype="module"fordert der Loader stattdessen die URL der Seite plus.wasman. - Liefern Sie über HTTP oder HTTPS aus;
file://-URLs funktionieren nicht. System.outschreibt in die Browser-Konsole.
Zum Ausliefern kopieren Sie hello.js, hello.js.wasm und die Seite auf einen beliebigen statischen Host.
Browser-Unterstützung
WasmGC-Bundles benötigen WebAssembly-Garbage-Collection und Ausnahmebehandlung mit exnref:
| Browser | Mindestversion |
|---|---|
| Chrome, Edge | 137 |
| Firefox | 131 |
| Safari | 18.4 |
Ein älterer Browser weist das Modul beim Laden der Seite mit einem CompileError zurück. Für Hosts ohne WasmGC siehe
Edge WASM.