Zum Inhalt springen

Edge WASM

Bauen Sie mit Elide WebAssembly mit linearem Speicher aus Java oder Kotlin: Bundle-Größen, Anforderungen an den Host und welche Laufzeiten die Ausgabe ausführen.

Auf dieser Seite

Ein WebImage-Artefakt mit backend = "wasm-lm" kompiliert Java oder Kotlin zu WebAssembly für JavaScript-Hosts, die WebAssembly zur Laufzeit kompilieren. Das Modul hält seinen Heap und seinen Garbage Collector im linearen Speicher, der Host braucht also keine WasmGC-Unterstützung. Wie der Browser-Build startet es über seinen JavaScript-Loader; es ist weder ein WASI-Modul noch eine WASI-Komponente und lässt sich nicht auf Cloudflare Workers ausliefern.

Bauen

Die Voraussetzungen entsprechen denen des Browser-Builds: wasm-as aus Binaryen im PATH und Code, der die Anforderungen von Native Image erfüllt.

amends "elide:project.pkl"
import "elide:Jvm.pkl" as jvm
import "elide:NativeImage.pkl" as nativeImage

name = "hello-edge"

artifacts {
  ["app-jar"] = new jvm.Jar {
    sources { "main" }
  }
  ["edge"] = new nativeImage.WebImage {
    from { "app-jar" }
    name = "hello"
    entrypoint = "Hello"
    backend = "wasm-lm"
    runtime = "node"
  }
}
elide build
node .dev/artifacts/native-image/hello.js

Ohne Manifest:

elide javac -- -d classes Hello.java
elide native-image -- --tool:wasm-lm -cp classes -o hello Hello
EigenschaftWert für Edge
backend"wasm-lm".
runtime"node" für Node-kompatible APIs; "generic" erkennt zusätzlich Browser-APIs.
autoRuntrue (Standard) führt main aus, sobald hello.js geladen ist.

Ausgabe und Größe

DateiAusliefernGröße bei Hello World
hello.jsJa: der Loader.42 KB
hello.js.wasmJa: das Modul.2,1 MB (660 KB mit gzip)
hello.js.watNein: Textform, zur Inspektion.38 MB
hello.js.mapOptional: wird mit sourceMap = true erzeugt.

Ein Modul mit linearem Speicher ist größer als der WasmGC-Build desselben Programms, der den Garbage Collector des Hosts nutzt.

Anforderungen an den Host

AnforderungGrund
WebAssembly-Ausnahmebehandlung mit exnrefDas Modul nutzt sie.
WebAssembly zur Laufzeit aus Bytes kompilierenDer Loader liest hello.js.wasm und kompiliert es beim Start.
Node-fs oder fetchDer Loader liest das Modul über eines davon.
HostFührt das Bundle aus
Node.js 25+Ja: node hello.js.
BunJa: bun hello.js.
Cloudflare WorkersNein: Workers kompilieren nur Module, die beim Deployment gebündelt wurden, und weisen das Kompilieren des Loaders zur Laufzeit mit Wasm code generation disallowed by embedder zurück.
WASI-Hosts (Fastly Compute, Wasmtime)Nein: Das Modul importiert aus seinem JavaScript-Loader, nicht aus WASI.

War diese Seite hilfreich?