العمل مع WebAssembly وTypeScript: من الألف إلى الياء — دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في WebAssembly وTypeScript

\n

WebAssembly (Wasm) هو تنسيق تعليمات ثنائي منخفض المستوى يتم تنفيذه في المتصفح بسرعة شبه أصلية. وبالاقتران مع TypeScript، وهي مجموعة شاملة من JavaScript ذات كتابة ثابتة، يحصل المطورون على أداة قوية لإنشاء تطبيقات ويب عالية الأداء. في هذه المقالة، سنستعرض دورة العمل الكاملة مع WebAssembly وTypeScript: من النظرية إلى الأمثلة العملية.

\n

يتيح WebAssembly تشغيل الكود المكتوب بلغات C وC++ وRust وغيرها في المتصفح. بينما يضيف TypeScript كتابة صارمة ويحسن قابلية قراءة الكود. معًا، يفتحان إمكانيات جديدة لمعالجة الفيديو والرسومات ثلاثية الأبعاد والتشفير والمهام الأخرى كثيفة الاستخدام للموارد.

\n\n

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

\n

ما هو WebAssembly؟

\n

WebAssembly هو آلة افتراضية بتنسيق تعليمات ثنائي. يتم تجميع الكود إلى ملفات .wasm، والتي يتم تحميلها وتنفيذها في المتصفح. المزايا الرئيسية:

\n
    \n
  • الأداء: تنفيذ قريب من السرعة الأصلية
  • \n
  • الأمان: تنفيذ معزول في بيئة رملية
  • \n
  • قابلية النقل: يعمل في جميع المتصفحات الحديثة
  • \n
  • التكامل: يمكن استدعاؤه بسهولة من JavaScript/TypeScript
  • \n
\n\n

تنسيقات WebAssembly

\n

يوجد تنسيقان رئيسيان:

\n
    \n
  • الثنائي (.wasm): تنسيق ثنائي مضغوط للتنفيذ
  • \n
  • النصي (.wat): تمثيل Wasm قابل للقراءة البشرية
  • \n
\n

عادةً ما يعمل المطورون مع ملفات .wasm، بينما يُستخدم التنسيق النصي لتصحيح الأخطاء.

\n\n

إعداد البيئة للعمل مع WebAssembly وTypeScript

\n

الأدوات اللازمة

\n

للبدء، ستحتاج إلى:

\n
    \n
  • Node.js (الإصدار 16+)
  • \n
  • مترجم TypeScript
  • \n
  • AssemblyScript (إذا كنت تكتب بصيغة تشبه TypeScript)
  • \n
  • متصفح يدعم WebAssembly
  • \n
\n\n

تثبيت AssemblyScript

\n

AssemblyScript هي لغة تقوم بتجميع كود يشبه TypeScript إلى WebAssembly. التثبيت:

\n
npm init -y\nnpm install --save-dev assemblyscript\nnpx asinit .
\n

بعد ذلك، يتم إنشاء هيكل المشروع مع ملفات assembly/index.ts والإعدادات.

\n\n

كتابة أول وحدة في AssemblyScript

\n

لننشئ دالة جمع بسيطة في ملف assembly/index.ts:

\n
export function add(a: i32, b: i32): i32 {\n  return a + b;\n}
\n

لاحظ النوع i32 — وهو عدد صحيح 32 بت، خاص بـ AssemblyScript.

\n\n

التجميع إلى WebAssembly

\n

نفذ الأمر التالي للتجميع:

\n
npx asc assembly/index.ts -o build/optimized.wasm --optimize
\n

العلامة --optimize تقوم بتحسين الحجم والأداء. الناتج هو ملف build/optimized.wasm.

\n\n

تكامل WebAssembly مع TypeScript

\n

تحميل وحدة Wasm

\n

لننشئ ملف TypeScript لتحميل واستدعاء دوال Wasm:

\n
// wasm-loader.ts\nexport async function loadWasmModule(): Promise<WebAssembly.Module> {\n  const response = await fetch('build/optimized.wasm');\n  const bytes = await response.arrayBuffer();\n  return WebAssembly.compile(bytes);\n}\n\nexport async function instantiateModule(): Promise<WebAssembly.Instance> {\n  const module = await loadWasmModule();\n  const instance = await WebAssembly.instantiate(module);\n  return instance;\n}
\n\n

استدعاء دوال Wasm من TypeScript

\n

الآن لننشئ ملف التطبيق الرئيسي:

\n
// main.ts\nimport { instantiateModule } from './wasm-loader';\n\nasync function main() {\n  try {\n    const instance = await instantiateModule();\n    const { add } = instanc                

المدونات

توصيات الكتب