0Pricing
React Academy · درس

من Rust إلى WASM باستخدام wasm-pack وReact

حوّل شيفرة Rust إلى WebAssembly باستخدام wasm-pack، واستخدم روابط JS المُنشأة في تطبيق React

من Rust إلى WASM باستخدام wasm-pack وReact درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

سلسلة أدوات Rust لـ WASM

تستخدم العملية القياسية لتحويل Rust إلى WASM أداتين: تنسّق wasm-pack عملية البناء، بما في ذلك ترجمة Rust إلى WASM وتشغيل wasm-bindgen وإنشاء حزمة npm، بينما تنشئ wasm-bindgen روابط JavaScript تتيح استدعاء دوال Rust كدوال JavaScript عادية مع التعامل السليم مع الأنواع.

سمة wasm-bindgen

تحدد السمة #[wasm_bindgen] دوال Rust وبُناها وأساليبها لتصديرها إلى JavaScript. ومن دونها، تُترجم الدالة إلى WASM لكنها لا تكون متاحة من JavaScript. وعند وسم دالة بالسمة #[wasm_bindgen]، ينشئ wasm-bindgen شيفرة الربط البرمجية لـ JavaScript التي تتولى تحويل الوسائط وقيم الإرجاع.

دالة Rust بسيطة

دالة Rust مُصدَّرة بأبسط صورة: use wasm_bindgen::prelude::*; #[wasm_bindgen] pub fn add(a: u32, b: u32) -> u32 { a + b }. تستقبل الدالة عددين صحيحين غير موقّعين بحجم 32 بت، وتعيد عددًا واحدًا. وينشئ wasm-bindgen شيفرة JavaScript تستدعي هذه الدالة بوسائط رقمية وتعيد نتيجة رقمية.

البناء باستخدام wasm-pack

شغّلوا wasm-pack build --target web في دليل حزمة Rust. يترجم هذا الأمر شيفرة Rust إلى WASM، ويشغّل wasm-bindgen لإنشاء روابط JavaScript، وينتج دليل pkg/ يحتوي على الملف الثنائي .wasm ووحدة ربط برمجية لـ JavaScript وتعريفات للأنواع في TypeScript.

الاستيراد في React

استوردوا الوحدة المُنشأة داخل مكوّن React: import init, { add } from '../pkg/my_lib'. تحمّل الدالة init الملف الثنائي لـ WASM وتُهيّئه، فاستدعُوها مرة واحدة داخل useEffect. وبعد التهيئة، استدعوا الدوال المصدَّرة مباشرةً: const result = add(2, 3).

تمرير البيانات المعقدة: js_sys وJsValue

بالنسبة إلى البيانات المعقدة التي تتجاوز الأرقام الأولية، يوفر wasm-bindgen الأنواع js_sys::Array (JavaScript Array) وjs_sys::Object (JavaScript Object) وwasm_bindgen::JsValue (أي قيمة JavaScript). وتتيح هذه الأنواع لدوال Rust قبول مصفوفات وكائنات JavaScript وإرجاعها، لكنها تنطوي على تكلفة تسلسل أكبر مقارنةً بالأنواع الأولية.

تقليل الحمل الناتج عن تحويل البيانات

يتمثل مبدأ الأداء الأساسي في إبقاء البيانات في ذاكرة WASM وإجراء جميع العمليات الحسابية فيها. مرّر البيانات مرة واحدة، وأجرِ العمليات الحسابية، ثم أعد النتيجة النهائية فقط. تجنّب الأنماط التي تنقل البيانات مرارًا عبر حد WASM عند كل خطوة. قد يكون الحمل الناتج عن عبور الحد صغيرًا في كل مرة، لكنه يتراكم داخل الحلقات المكثفة.

استخدام serde-wasm-bindgen مع البُنى

تتيح حزمة serde-wasm-bindgen إجراء تسلسل لبُنى Rust وإلغاء تسلسلها من كائنات JavaScript وإليها باستخدام Serde. أضف إلى البنية التعليمة التوضيحية #[derive(Serialize, Deserialize)]، واستخدم serde_wasm_bindgen::to_value() وfrom_value(). هذا هو النهج القياسي لتمرير البيانات المركبة والمنظمة.

تشغيل WASM في Web Worker

تحجب حسابات WASM طويلة الأمد الخيط الذي تعمل عليه. ضع WASM في Web Worker لإبقاء الخيط الرئيسي في React متاحًا. أنشئ ملف Worker يهيئ وحدة WASM ويتولى معالجة الرسائل. أرسل البيانات إلى العامل باستخدام postMessage، واستقبل النتائج عبر حدث message، ثم حدّث حالة React بالنتيجة.

أنواع TypeScript من wasm-pack

ينشئ wasm-pack تلقائيًا ملفات تعريف TypeScript (.d.ts) لجميع الدوال والأنواع المُصدَّرة. وهذا يمنح مشروع React المكتوب بـ TypeScript أمانًا كاملًا للأنواع عند استدعاء دوال Rust. تعكس الأنواع المُنشأة توقيعات دوال Rust — add(a: number, b: number): number — ولذلك تعمل الإكمالات التلقائية في بيئة التطوير المتكاملة بشكل صحيح.

اعتبارات الإنتاج

يتراوح حجم ملفات WASM الثنائية عادةً بين 100kb و2MB بعد التحسين. فعّل wasm-opt أثناء عملية البناء باستخدام ضبط opt-level = "z" في ملف تعريف الإصدار في Cargo.toml لإجراء تحسين مكثف للحجم. قدّم ملفات WASM باستخدام Content-Type: application/wasm، وفعّل HTTP/2 حتى يتمكن المتصفح من بث الملف الثنائي بكفاءة.

سمة wasm-bindgen

ما الغرض من السمة #[wasm_bindgen] في شيفرة Rust؟

مراجعة الدرس

يعمل الأمر wasm-pack build --target web على ترجمة Rust إلى WASM وإنشاء روابط JavaScript باستخدام wasm-bindgen. أضف السمة #[wasm_bindgen] إلى الدوال المُصدَّرة. استورد init والدوال المُصدَّرة في React، واستدعِ init() داخل useEffect، ثم استدعِ الدوال كما تستدعي دوال JavaScript العادية. استخدم serde-wasm-bindgen لتسلسل البُنى المعقدة. شغّل WASM في Web Workers عند إجراء حسابات طويلة للحفاظ على الخيط الرئيسي في React متاحًا.

الأسئلة الشائعة

هل درس «من Rust إلى WASM باستخدام wasm-pack وReact» مجاني؟

نعم — نص درس «من Rust إلى WASM باستخدام wasm-pack وReact» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «من Rust إلى WASM باستخدام wasm-pack وReact»؟

حوّل شيفرة Rust إلى WebAssembly باستخدام wasm-pack، واستخدم روابط JS المُنشأة في تطبيق React تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «من Rust إلى WASM باستخدام wasm-pack وReact»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ما WebAssembly وأين يأتي دور React؟
  2. تحميل وحدات WASM في React
  3. من Rust إلى WASM باستخدام wasm-pack وReact
  4. حالات استخدام WASM: معالجة الصور والحوسبة
← العودة إلى React Academy