Skip to content

Node.js مع WebAssembly

WebAssembly هي لغة تجميع عالية الأداء يمكن تجميعها من لغات مختلفة، بما في ذلك C/C++ و Rust و AssemblyScript. وهي مدعومة حاليًا من قبل Chrome و Firefox و Safari و Edge و Node.js!

تحدد مواصفات WebAssembly تنسيقين للملفات، تنسيق ثنائي يسمى WebAssembly Module بامتداد .wasm وتمثيل نصي مطابق يسمى WebAssembly Text format بامتداد .wat.

المفاهيم الأساسية

  • الوحدة (Module) - ملف WebAssembly ثنائي مُجمَّع، أي ملف .wasm.
  • الذاكرة (Memory) - ArrayBuffer قابلة لتغيير الحجم.
  • الجدول (Table) - مصفوفة مكتوبة قابلة لتغيير الحجم من المراجع غير المخزنة في الذاكرة.
  • المثيل (Instance) - إنشاء لوحدة (Module) بذاكرتها وجدولها ومتغيراتها.

من أجل استخدام WebAssembly، تحتاج إلى ملف ثنائي .wasm ومجموعة من واجهات برمجة التطبيقات للتواصل مع WebAssembly. يوفر Node.js واجهات برمجة التطبيقات الضرورية عبر الكائن العام WebAssembly.

javascript
console.log(WebAssembly)
/*
Object [WebAssembly] {
  compile: [Function: compile],
  validate: [Function: validate],
  instantiate: [Function: instantiate]
}
*/

إنشاء وحدات WebAssembly

توجد طرق متعددة لإنشاء ملفات WebAssembly الثنائية بما في ذلك:

  • كتابة WebAssembly (.wat) يدويًا وتحويلها إلى تنسيق ثنائي باستخدام أدوات مثل wabt.
  • استخدام emscripten مع تطبيق C/C++
  • استخدام wasm-pack مع تطبيق Rust
  • استخدام AssemblyScript إذا كنت تفضل تجربة شبيهة بـ TypeScript

TIP

تقوم بعض هذه الأدوات بإنشاء ليس فقط الملف الثنائي، ولكن أيضًا رمز JavaScript "اللاصق" وملفات HTML المقابلة لتشغيلها في المتصفح.

كيفية استخدامها

بمجرد أن يكون لديك وحدة WebAssembly، يمكنك استخدام كائن WebAssembly الخاص بـ Node.js لإنشاء مثيل له.

javascript
const fs = require('node:fs')
const wasmBuffer = fs.readFileSync('/path/to/add.wasm')
WebAssembly.instantiate(wasmBuffer).then(wasmModule => {
  // دالة مصدَّرة تعيش تحت instance.exports
  const { add } = wasmModule.instance.exports
  const sum = add(5, 6)
  console.log(sum) // الإخراج: 11
})

التفاعل مع نظام التشغيل

لا يمكن لوحدات WebAssembly الوصول مباشرة إلى وظائف نظام التشغيل بمفردها. يمكن استخدام أداة طرف ثالث Wasmtime للوصول إلى هذه الوظائف. تستخدم Wasmtime واجهة برمجة التطبيقات WASI للوصول إلى وظائف نظام التشغيل.

مصادر