Aller au contenu

Edge WASM

Construisez du WebAssembly à mémoire linéaire à partir de Java ou Kotlin avec Elide : tailles des bundles, exigences de l'hôte et environnements d'exécution capables de lancer le résultat.

Sur cette page

Un artefact WebImage avec backend = "wasm-lm" compile Java ou Kotlin en WebAssembly pour les hôtes JavaScript qui compilent le WebAssembly à l’exécution. Le module garde son tas et son ramasse-miettes en mémoire linéaire : l’hôte n’a pas besoin de prendre en charge WasmGC. Comme le build pour navigateur, il démarre via son chargeur JavaScript ; ce n’est ni un module ni un composant WASI, et il ne se déploie pas sur Cloudflare Workers.

Construire

Les prérequis sont ceux du build pour navigateur : wasm-as de Binaryen dans le PATH, et du code conforme aux exigences 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

Sans manifeste :

elide javac -- -d classes Hello.java
elide native-image -- --tool:wasm-lm -cp classes -o hello Hello
PropriétéValeur pour Edge
backend"wasm-lm".
runtime"node" pour les API compatibles Node ; "generic" détecte aussi les API du navigateur.
autoRuntrue (par défaut) exécute main au chargement de hello.js.

Sortie et taille

FichierÀ déployerTaille d’un hello world
hello.jsOui : le chargeur.42 Ko
hello.js.wasmOui : le module.2,1 Mo (660 Ko compressé avec gzip)
hello.js.watNon : forme texte, pour l’inspection.38 Mo
hello.js.mapFacultatif : produit avec sourceMap = true.

Un module à mémoire linéaire est plus gros que le build WasmGC du même programme, qui utilise le ramasse-miettes de l’hôte.

Exigences de l’hôte

ExigenceRaison
Gestion des exceptions WebAssembly avec exnrefLe module l’utilise.
Compilation de WebAssembly à partir d’octets à l’exécutionLe chargeur lit hello.js.wasm et le compile au démarrage.
fs de Node ou fetchLe chargeur lit le module via l’un des deux.
HôteExécute le bundle
Node.js 25+Oui : node hello.js.
BunOui : bun hello.js.
Cloudflare WorkersNon : Workers ne compile que les modules intégrés au déploiement et rejette la compilation à l’exécution du chargeur avec Wasm code generation disallowed by embedder.
Hôtes WASI (Fastly Compute, Wasmtime)Non : le module importe depuis son chargeur JavaScript, pas depuis WASI.

Cette page vous a-t-elle aidé ?