Zum Inhalt springen

Browser WASM

Kompilieren Sie Java oder Kotlin mit Elide zu WasmGC: Bauen Sie ein WebAssembly-Modul samt JavaScript-Loader, laden Sie es in einer Webseite und prüfen Sie die Browser-Unterstützung.

Auf dieser Seite

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-as im PATH zur 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.java
public 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 build

Die Ausgabe landet in .dev/artifacts/native-image/:

DateiAusliefernGröße bei Hello World
hello.jsJa: der Loader.110 KB
hello.js.wasmJa: das Modul.1,3 MB (480 KB mit gzip)
hello.js.watNein: Textform, zur Inspektion.32 MB
hello.js.mapOptional: wird mit sourceMap = true erzeugt.
EigenschaftWert für den Browser
backend"wasm-gc" (der Standard).
runtime"browser", oder "generic", um Node-Unterstützung im selben Loader zu behalten.
autoRuntrue (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 .wasm an; halten Sie hello.js und hello.js.wasm daher im selben Verzeichnis.
  • Laden Sie ihn mit einem klassischen <script>. Mit type="module" fordert der Loader stattdessen die URL der Seite plus .wasm an.
  • Liefern Sie über HTTP oder HTTPS aus; file://-URLs funktionieren nicht.
  • System.out schreibt 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:

BrowserMindestversion
Chrome, Edge137
Firefox131
Safari18.4

Ein älterer Browser weist das Modul beim Laden der Seite mit einem CompileError zurück. Für Hosts ohne WasmGC siehe Edge WASM.

War diese Seite hilfreich?