Aller au contenu

Browser WASM

Compilez Java ou Kotlin en WasmGC avec Elide : construisez un module WebAssembly et un chargeur JavaScript, chargez-le depuis une page web et vérifiez la prise en charge des navigateurs.

Sur cette page

Un artefact WebImage avec backend = "wasm-gc" compile Java ou Kotlin en WasmGC : un module WebAssembly dont les objets vivent dans le tas à ramasse-miettes du navigateur, accompagné d’un chargeur JavaScript qui le récupère et le démarre. Pour exécuter un fichier .wasm existant avec Elide, voir WebAssembly.

Prérequis

  • Binaryen 119 ou ultérieur, avec wasm-as dans le PATH au moment du build.
  • Du code conforme aux exigences de Native Image : métadonnées d’accessibilité pour la réflexion, les ressources et les proxys ; aucune dépendance native.

Construire

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

La sortie va dans .dev/artifacts/native-image/ :

FichierÀ déployerTaille d’un hello world
hello.jsOui : le chargeur.110 Ko
hello.js.wasmOui : le module.1,3 Mo (480 Ko compressé avec gzip)
hello.js.watNon : forme texte, pour l’inspection.32 Mo
hello.js.mapFacultatif : produit avec sourceMap = true.
PropriétéValeur pour le navigateur
backend"wasm-gc" (par défaut).
runtime"browser", ou "generic" pour conserver la prise en charge de Node dans le même chargeur.
autoRuntrue (par défaut) exécute main au chargement de hello.js.

Autres propriétés et options du compilateur : WebImage.

Le charger dans une page

Placez index.html à côté du 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

Ouvrez http://localhost:8000/ ; Hello from WasmGC s’affiche dans la console du navigateur.

  • Le chargeur demande le module à sa propre URL suivie de .wasm : gardez hello.js et hello.js.wasm dans le même répertoire.
  • Chargez-le avec un <script> classique. Avec type="module", le chargeur demande à la place l’URL de la page suivie de .wasm.
  • Servez-le en HTTP ou HTTPS ; les URL file:// ne fonctionnent pas.
  • System.out écrit dans la console du navigateur.

Pour déployer, copiez hello.js, hello.js.wasm et la page sur n’importe quel hébergement statique.

Prise en charge des navigateurs

Les bundles WasmGC nécessitent le ramasse-miettes de WebAssembly et la gestion des exceptions avec exnref :

NavigateurVersion minimale
Chrome, Edge137
Firefox131
Safari18.4

Un navigateur plus ancien rejette le module avec une CompileError au chargement de la page. Pour les hôtes sans WasmGC, voir Edge WASM.

Cette page vous a-t-elle aidé ?