عندما يلتقي C# مع WebAssembly: عصر جديد لتطوير الويب
\n\nتخيل عالماً حيث يمكنك أخذ لغة C# المفضلة لديك، كتابة خوارزمية معقدة لمعالجة الصور، ترجمتها وتشغيلها مباشرة في المتصفح - بأداء قريب من الأداء الأصلي. هل يبدو هذا كخيال علمي؟ لا، ليس كذلك. هذه هي WebAssembly (أو Wasm ببساطة) - تقنية تقلب المفاهيم حول ما يمكن فعله على الويب.
\n\nكنت متشككاً بنفسي حتى جربتها. لفترة طويلة، بدا أن JavaScript هي اللغة الوحيدة للمتصفح. لكن الأوقات تتغير. اليوم، نحن كمطوري C# يمكننا تجاوز حدود الخادم وبناء تطبيقات عميل كاملة بلغتنا الأم. في هذه المقالة، سأريكم كيف يعمل هذا، ولماذا هو مهم، وسأقدم أمثلة كود حقيقية.
\n\nما هو WebAssembly بلغة بسيطة
\n\nدعنا نتجنب المصطلحات المعقدة. WebAssembly هو تنسيق ثنائي منخفض المستوى للتعليمات يتم تنفيذه في المتصفح بسرعة شبه أصلية. على عكس JavaScript الذي يتم تفسيره، يتم ترجمة Wasm مسبقاً. الأمر أشبه بتشغيل برنامج بلغة C++ مباشرة في المتصفح، ولكن مع بيئة آمنة معزولة.
\n\nكيف يرتبط هذا بـ C#؟
\n\nيمكن ترجمة كود C# الخاص بك إلى WebAssembly. تكتب بلغتك المألوفة، تستخدم مكتبات .NET، وتحصل في النهاية على ملف .wasm ينفذه المتصفح. هناك عدة طرق لذلك، لكن أشهرها هو Blazor WebAssembly.
- \n
- Blazor WebAssembly - إطار عمل من Microsoft يشغل .NET في المتصفح. \n
- Mono Wasm Runtime - بيئة تشغيل .NET مترجمة إلى Wasm. \n
- NativeAOT-ot - وضع تجريبي لترجمة C# مباشرة إلى Wasm بدون بيئة تشغيل. \n
لماذا نستخدم C# في المتصفح أصلاً؟
\n\nسؤال جيد. فهناك JavaScript و TypeScript في النهاية. لماذا نحتاج C#؟ الإجابة تكمن في ثلاثة أشياء: الأداء، الأمان، والنظام البيئي.
\n\n1. الأداء للحسابات الثقيلة
\nJavaScript جيد، لكنه أبطأ في معالجة الفيديو، التشفير، المحاكاة، أو تحليل البيانات الكبيرة. يمكن أن يكون WebAssembly بلغة C# أسرع بمقدار 10-20 مرة لبعض المهام. على سبيل المثال، إذا كنت تكتب محرر صور بلغة C#، فسيعمل في المتصفح بنفس سرعة تطبيق سطح المكتب.
\n\n2. إعادة استخدام الكود
\nهل لديك مكتبة بلغة C# للتحقق من صحة البيانات على الخادم؟ فقط خذها واستخدمها على العميل. لا حاجة لتكرار المنطق بلغة JavaScript. هذا يقلل من عدد الأخطاء ويسرع التطوير.
\n\n3. أمان الأنواع
\nC# هي لغة ذات أنواع صارمة. العديد من الأخطاء التي تُكتشف في وقت التشغيل في JavaScript، تُكتشف في C# في وقت الترجمة. بالنسبة لتطبيقات الأعمال المعقدة، هذا أمر بالغ الأهمية.
\n\nمثال عملي: ترجمة C# إلى WebAssembly
\n\nدعنا نكتب برنامجاً بسيطاً بلغة C# يحسب المضروب (factorial) ونشغله في المتصفح. سنستخدم Blazor WebAssembly لهذا الغرض.
\n\nالخطوة 1: إنشاء المشروع
\ndotnet new blazorwasm -o WasmFactorial\ncd WasmFactorial\n\nسينشئ هذا قالب Blazor WebAssembly القياسي. يحتوي بالفعل على كل ما هو ضروري: بيئة تشغيل .NET مترجمة إلى Wasm، وجسر للتفاعل مع JavaScript.
\n\nالخطوة 2: كتابة كود C# للحسابات
\nسنضيف خدمة لحساب المضروب. لننشئ ملف Services/FactorialService.cs:
namespace WasmFactorial.Services;\n\npublic class FactorialService\n{\n public long Calculate(int n)\n {\n if (n < 0) throw new ArgumentException("يجب أن يكون الرقم غير سالب");\n if (n == 0) return 1;\n \n long result = 1;\n for (int i = 1; i <= n; i++)\n {\n result *= i;\n }\n