Перейти к содержимому

Browser WASM

Компилируйте Java или Kotlin в WasmGC с помощью Elide: соберите модуль WebAssembly и загрузчик на JavaScript, подключите его к веб-странице и проверьте поддержку браузерами.

На этой странице

Артефакт WebImage с backend = "wasm-gc" компилирует Java или Kotlin в WasmGC: модуль WebAssembly, объекты которого живут в куче браузера со сборкой мусора, и загрузчик на JavaScript, который скачивает и запускает модуль. Как запустить готовый файл .wasm в Elide, см. в разделе WebAssembly.

Требования

  • Binaryen 119 или новее, с wasm-as в PATH во время сборки.
  • Код, отвечающий требованиям Native Image: метаданные достижимости для рефлексии, ресурсов и прокси; без нативных зависимостей.

Сборка

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

Результат попадает в .dev/artifacts/native-image/:

ФайлРазвёртыватьРазмер hello world
hello.jsДа: загрузчик.110 КБ
hello.js.wasmДа: модуль.1,3 МБ (480 КБ в gzip)
hello.js.watНет: текстовая форма для изучения.32 МБ
hello.js.mapПо желанию: создаётся при sourceMap = true.
СвойствоЗначение для браузера
backend"wasm-gc" (по умолчанию).
runtime"browser" или "generic", чтобы сохранить поддержку Node в том же загрузчике.
autoRuntrue (по умолчанию) запускает main при загрузке hello.js.

Другие свойства и параметры компилятора: WebImage.

Загрузка на странице

Положите index.html рядом с бандлом:

<!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

Откройте http://localhost:8000/; Hello from WasmGC появится в консоли браузера.

  • Загрузчик запрашивает модуль по собственному URL с добавлением .wasm, поэтому держите hello.js и hello.js.wasm в одном каталоге.
  • Подключайте его классическим <script>. С type="module" загрузчик вместо этого запрашивает URL страницы с добавлением .wasm.
  • Отдавайте файлы по HTTP или HTTPS; URL вида file:// не работают.
  • System.out пишет в консоль браузера.

Для развёртывания скопируйте hello.js, hello.js.wasm и страницу на любой статический хостинг.

Поддержка браузерами

Бандлам WasmGC нужны сборка мусора WebAssembly и обработка исключений с exnref:

БраузерМинимальная версия
Chrome, Edge137
Firefox131
Safari18.4

Более старый браузер отклоняет модуль с CompileError при загрузке страницы. Для хостов без WasmGC см. Edge WASM.

Была ли эта страница полезной?