Перейти до вмісту

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; адреси file:// не працюють.
  • System.out пише в консоль браузера.

Для розгортання скопіюйте hello.js, hello.js.wasm і сторінку на будь-який статичний хостинг.

Підтримка браузерами

Бандлам WasmGC потрібні збирання сміття WebAssembly та обробка винятків з exnref:

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

Старіший браузер відхиляє модуль із CompileError під час завантаження сторінки. Для хостів без WasmGC див. Edge WASM.

Чи була ця сторінка корисною?