Saltar al contenido

Edge WASM

Genere WebAssembly de memoria lineal a partir de Java o Kotlin con Elide: tamaños del paquete, requisitos del host y qué entornos de ejecución ejecutan la salida.

En esta página

Un artefacto WebImage con backend = "wasm-lm" compila Java o Kotlin a WebAssembly para hosts JavaScript que compilan WebAssembly en tiempo de ejecución. El módulo mantiene su heap y su recolector de basura en memoria lineal, así que el host no necesita compatibilidad con WasmGC. Como la compilación para navegador, se inicia mediante su cargador JavaScript; no es un módulo ni un componente WASI, y no se despliega en Cloudflare Workers.

Compilar

Los requisitos previos son los de la compilación para navegador: wasm-as de Binaryen en el PATH, y código que cumpla los requisitos de Native Image.

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

Sin manifiesto:

elide javac -- -d classes Hello.java
elide native-image -- --tool:wasm-lm -cp classes -o hello Hello
PropiedadValor para Edge
backend"wasm-lm".
runtime"node" para las API compatibles con Node; "generic" también detecta las API del navegador.
autoRuntrue (por defecto) ejecuta main cuando se carga hello.js.

Salida y tamaño

ArchivoDesplegarTamaño de un hola mundo
hello.jsSí: el cargador.42 KB
hello.js.wasmSí: el módulo.2,1 MB (660 KB con gzip)
hello.js.watNo: forma de texto, para inspección.38 MB
hello.js.mapOpcional: se genera con sourceMap = true.

Un módulo de memoria lineal es más grande que la compilación WasmGC del mismo programa, que usa el recolector de basura del host.

Requisitos del host

RequisitoMotivo
Manejo de excepciones de WebAssembly con exnrefEl módulo lo usa.
Compilar WebAssembly a partir de bytes en tiempo de ejecuciónEl cargador lee hello.js.wasm y lo compila al iniciarse.
fs o fetch de NodeEl cargador lee el módulo mediante uno de ellos.
HostEjecuta el paquete
Node.js 25+Sí: node hello.js.
BunSí: bun hello.js.
Cloudflare WorkersNo: Workers solo compila módulos incluidos al desplegar y rechaza la compilación en tiempo de ejecución del cargador con Wasm code generation disallowed by embedder.
Hosts WASI (Fastly Compute, Wasmtime)No: el módulo importa de su cargador JavaScript, no de WASI.

¿Te resultó útil esta página?