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

Edge WASM

Збирайте WebAssembly з лінійною пам'яттю з Java або Kotlin за допомогою Elide: розміри бандлів, вимоги до хоста та середовища виконання, що запускають результат.

На цій сторінці

Артефакт WebImage з backend = "wasm-lm" компілює Java або Kotlin у WebAssembly для JavaScript-хостів, які компілюють WebAssembly під час виконання. Модуль тримає свою купу та збирач сміття в лінійній пам’яті, тому хосту не потрібна підтримка WasmGC. Як і збірка для браузера, він запускається через свій завантажувач на JavaScript; це не модуль і не компонент WASI, і він не розгортається в Cloudflare Workers.

Збирання

Вимоги ті самі, що й для збірки для браузера: wasm-as з Binaryen у PATH і код, що відповідає вимогам 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

Без маніфесту:

elide javac -- -d classes Hello.java
elide native-image -- --tool:wasm-lm -cp classes -o hello Hello
ВластивістьЗначення для Edge
backend"wasm-lm".
runtime"node" для Node-сумісних API; "generic" також визначає API браузера.
autoRuntrue (за замовчуванням) запускає main під час завантаження hello.js.

Результат і розмір

ФайлРозгортатиРозмір hello world
hello.jsТак: завантажувач.42 КБ
hello.js.wasmТак: модуль.2,1 МБ (660 КБ у gzip)
hello.js.watНі: текстова форма для перегляду.38 МБ
hello.js.mapЗа бажанням: створюється з sourceMap = true.

Модуль із лінійною пам’яттю більший за збірку WasmGC тієї самої програми, яка використовує збирач сміття хоста.

Вимоги до хоста

ВимогаПричина
Обробка винятків WebAssembly з exnrefМодуль її використовує.
Компіляція WebAssembly з байтів під час виконанняЗавантажувач читає hello.js.wasm і компілює його під час запуску.
fs з Node або fetchЗавантажувач читає модуль через одне з них.
ХостЗапускає бандл
Node.js 25+Так: node hello.js.
BunТак: bun hello.js.
Cloudflare WorkersНі: Workers компілює лише модулі, включені до бандла під час розгортання, і відхиляє компіляцію завантажувачем під час виконання з помилкою Wasm code generation disallowed by embedder.
Хости WASI (Fastly Compute, Wasmtime)Ні: модуль імпортує зі свого завантажувача на JavaScript, а не з WASI.

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