انتقل إلى المحتوى

Edge WASM

ابنِ WebAssembly بذاكرة خطية من Java أو Kotlin باستخدام Elide: أحجام الحزم، ومتطلبات البيئة المضيفة، وبيئات التشغيل التي تشغّل المخرجات.

في هذه الصفحة

يصرّف مُخرَج WebImage ذو backend = "wasm-lm" شيفرة Java أو Kotlin إلى WebAssembly لبيئات JavaScript المضيفة التي تصرّف WebAssembly وقت التشغيل. تحتفظ الوحدة بكومتها وجامع مهملاتها في الذاكرة الخطية، لذا لا تحتاج البيئة المضيفة إلى دعم WasmGC. ومثل نسخة المتصفح، تبدأ الوحدة عبر محمّل JavaScript الخاص بها؛ وهي ليست وحدة WASI ولا مكوّن 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" لواجهات API المتوافقة مع Node؛ وتكتشف "generic" واجهات المتصفح أيضًا.
autoRunتشغّل القيمة true (الافتراضية) الدالة main عند تحميل hello.js.

المخرجات والحجم

الملفيُنشرالحجم لبرنامج hello world
hello.jsنعم: المحمّل.42 KB
hello.js.wasmنعم: الوحدة.2.1 MB (660 KB بعد ضغط gzip)
hello.js.watلا: الصيغة النصية، للفحص.38 MB
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.

هل كانت هذه الصفحة مفيدة؟