WebAssembly: المعنى والمزايا وحالات الاستخدام والمزيد

هل أنت منشغل بالضجة التي أثيرت حول WebAssembly، ولكنك لست متأكدًا تمامًا مما هو عليه؟ إليك التفاصيل.

WebAssembly أو Wasm هو تنسيق الكود الثنائي لإنشاء برامج يمكن تنفيذها على أي بنية كمبيوتر.

يتضمن النظام آلة افتراضية ومترجمًا يترجم كود الكمبيوتر من لغات البرمجة، مثل C أو C++ إلى تنسيق .wat القابل للقراءة من قبل الإنسان وتنسيق .wasm الثنائي.

كان الهدف الأصلي لـ WebAssembly هو تمكين المبرمجين من تطوير تطبيقات عالية الأداء لصفحات الويب من خلال تمكين سرعات التنفيذ شبه الأصلية داخل المتصفح. ولكن يبدو أن التكنولوجيا تتطور الآن إلى ما هو أبعد من المتصفحات وتصل إلى السحابة.

يوضح لك هذا الدليل كل ما تحتاج إلى معرفته حول هذه التكنولوجيا المتطورة، ونقاط قوتها وضعفها، بالإضافة إلى إمكاناتها المستقبلية.

ما هو WebAssembly؟

WebAssembly هو تنسيق ثنائي الكود يتم تشغيله على جهاز افتراضي ويمكن تجميع لغات مختلفة إليه. وهو مصمم ليكون محمولاً ويمكن تشغيله على متصفح ويب أو كتطبيق خادم.

تم إصدار WebAssembly لأول مرة في عام 2017، وهو توصية من W3C منذ عام 2019 ويتم صيانته من قبل العديد من المساهمين، بما في ذلك Mozilla وGoogle وMicrosoft وRed Hat وغيرهم الكثير.

كان الهدف الأصلي هو تطوير سرعات تنفيذ قريبة من الأصلية كما ستجد مع تطبيقات C/C++ داخل المتصفح. كما أنه من المفترض أن يكون معيار ويب آمنًا ومفتوح المصدر وقابلًا للتصحيح ولا يعتمد على إصدارات ومتوافقًا مع الإصدارات السابقة ومتوافقًا مع JavaScript.

كيف يعمل WebAssembly؟

تم تصميم WebAssembly كمحرك وقت تشغيل، مثل Java أو JavaScript، والذي يمكن تضمينه في بيئة متصفح أو خادم لتشغيل كود الكمبيوتر المجمّع بتنسيق ثنائي .wasm أو تنسيق نصي .wat.

لكتابة التعليمات البرمجية لتنفيذ WebAssembly، يكتب المطور البرنامج بأي من اللغات العديدة المدعومة. ثم يقوم بتجميعه باستخدام مُجمِّع WebAssembly إما AOT (التنفيذ قبل الوقت المحدد) أو JIT (التنفيذ في الوقت المناسب).

يمكن لهذا الكود القيام بمعظم العمل في بيئة التنفيذ، لكنه لا يستطيع الوصول إلى كائنات DOM الخاصة بالمتصفح أو تعديلها. يجب أن يمر أي تفاعل من هذا القبيل عبر JavaScript.

كيفية إنشاء تطبيق WebAssembly نموذجي

من الممكن إنشاء تطبيق Wasm بسيط لمتصفح الويب باتباع بضع خطوات فقط كما ترى أدناه:

  1. تحميل وتثبيت مجموعة أدوات تطوير البرامج Emscripten.
  2. اكتب العينة الخاصة بك مرحبا بالعالم ج يمكنك كتابة الكود أو القيام بذلك باستخدام C++/Rust إذا كنت تفضل ذلك.
  3. يجري emcc helloworld.c -s WASM=1 -s helloworld.html في محطة طرفية لتجميع الكود إلى WebAssembly باستخدام Emscripten. سيؤدي ذلك إلى إنشاء ملفات Wasm الثنائية وHTML وJavaScript التي تحتاجها (كود لاصق).
  4. قم بتقديم صفحة helloworld.html عبر متصفح الويب الخاص بك.

مزايا WebAssembly

هناك العديد من الأسباب لاعتماد WebAssembly والتقنيات المرتبطة به، وهي تشمل:

  • أداء قريب من الأداء الأصلي – يتمتع WebAssembly بتصميم منخفض المستوى لدرجة أنه يوفر أداءً مشابهًا للغات منخفضة المستوى مثل C وC++.
  • أمن - تم تصميم النظام ليكون آمنًا من خلال عزله في بيئة افتراضية ذات وصول محدود إلى النظام.
  • فتح قياسي – تساهم العديد من المنظمات والأفراد في WebAssembly وهو توصية رسمية من W3C.
  • وزن خفيف – يتم تجميع WebAssembly في كود ثنائي ليتم تنفيذه في جهاز افتراضي. هذا الكود محمول ولا يحتاج إلى ملفات النظام ولا يأتي معها.
  • دعم متعدد اللغات - يمكن تجميع أكثر من 50 لغة في WebAssembly.
  • منصة مستقلة – تم تصميم الآلة الافتراضية WebAssembly بحيث تقدم كل بنية بيئة تشغيل واحدة. كل ما يتعين على المطور فعله هو كتابة التعليمات البرمجية لـ WebAssembly.

حدود WebAssembly

  • جارى العمل عليها – المعيار لا يزال قيد التطوير وبالتالي فإن العديد من الميزات والتحسينات لم تظهر بعد.
  • لا جمع القمامة – لا يزال WebAssembly يفتقر إلى ميزة جمع القمامة، على الرغم من أنه قد يتم تنفيذه قريبًا.
  • لا يوجد وصول إلى DOM - لا يمكنك الوصول إلى DOM الخاص بمتصفح الويب مباشرةً من WebAssembly، وسوف تحتاج إلى المرور عبر JavaScript.

WebAssembly مقابل Java

Java هي أقدم تنفيذ لـ WebAssembly. تم تصميمها كلغة للكتابة مرة واحدة والتشغيل في أي مكان، لكنها واجهت العديد من المشكلات أثناء ذلك.

تمامًا كما هو الحال مع Java، يستخدم WebAssembly بيئة تشغيل (RE) لتشغيل الكود الخاص به، ولكن على عكس Java، يمكنك كتابة WebAssembly باللغة التي تختارها.

WebAssembly مقابل JavaScript

يتم تنفيذ WebAssembly في المتصفح أو بيئة مضيفة أخرى، تمامًا مثل جافا سكريبتومع ذلك، حيث يتم تسليم JavaScript إلى بيئة التنفيذ بتنسيق نصي وتجميعه في الوقت المناسب، فإن WebAssembly يحتوي على تنسيقات نصية وثنائية.

داخل متصفحات الويب، يمكن لـ JavaScript الوصول إلى DOM، بينما لا يمكن لـ WebAssembly ذلك. ومع ذلك، عندما يتعلق الأمر بسرعة التنفيذ، يتفوق WebAssembly على JavaScript، بفضل سرعات تنفيذ التعليمات البرمجية شبه الأصلية.

تتميز WebAssembly بالسرعة وهي السبب وراء كونها مثالية للعديد من الاستخدامات. يمكنك تحميل WebAssembly في متصفح باستخدام JavaScript ويمكن تشغيل الكودين معًا ومشاركة الموارد.

WebAssembly مقابل Docker مقابل Kubernetes

Docker وKubernetes من التقنيات الشائعة التي تُشغّل الحوسبة السحابية. Docker هي تقنية حاويات تُمكّن المطورين من تجميع تطبيق مع جميع تبعيات نظامه في حزمة واحدة. هذا يُسهّل نشر التطبيق في أي بيئة سحابية في ثانية أو أقل.

من ناحية أخرى، يُعد Kubernetes نظامًا مفتوح المصدر لإدارة ونشر التطبيقات المُدارة بالحاويات، مثل Docker وCRI-O وcontainerd وأي تطبيق لواجهة تشغيل الحاويات (CRI) الخاصة بـ Kubernetes. كما يُسهّل Kubernetes توسيع نطاق عمليات النشر السحابية عبر خوادم أو أجهزة افتراضية متعددة.

من هذا المنطلق، فإن WebAssembly يشبه Docker إلى حد كبير ويمكن تشغيله كتطبيق سحابي محصور في حاويات باستخدام Kubernetes. كما أنه يوفر العديد من المزايا مقارنة بـ Docker، ولكنه ربما لن يحل محله.

ما وراء المتصفح

في البداية، كانت هناك خوادم الويب. وكان عليك تخصيص جهاز كامل كخادم. ثم ظهرت الآلات الافتراضية، أو VMs، التي سمحت للخادم بالعمل على خيط وحدة معالجة مركزية واحد أو أكثر. ومع ذلك، كان عليك أن يكون لديك جهاز افتراضي مخصص.

الحوسبة السحابية لقد أصبح من الممكن تشغيل الخوادم وتشغيلها فقط عند الحاجة إليها من خلال وضع التطبيقات في حاويات. وقد أدى هذا إلى خفض التكاليف، حيث كان عليك فقط أن تدفع مقابل ما تستخدمه - لم يعد هناك أجهزة مخصصة. ولكن لا تزال هناك بعض المشكلات.

أولاً، يمكن أن يصل حجم ملفات Docker إلى عدة غيغابايت، مما يعني تأخيرًا طفيفًا في بدء التشغيل ومشاكل إدارية أخرى. مع ذلك، قد لا يتجاوز حجم ملف Wasm مشابه بضعة ميغابايت لأنه ملف ثنائي مُجمّع مسبقًا. هذا يمنحه وقت بدء تشغيل أسرع بكثير من Docker، وهو مثالي لبعض التطبيقات ذات الوقت الحرج.

ثانيًا، يعني تصميم WebAssembly أن المطور لا يحتاج إلى إدارة موارد النظام وتعيينها، بل يمكنه ببساطة الوصول إلى الهدف باستخدام لغة البرمجة التي يختارها.

تجعل هذه الميزات WebAssembly مثاليًا لتشغيل الخدمات السحابية الصغيرة، على الرغم من أن تطبيقات Docker لا تزال مفضلة للتطبيقات التي تتطلب المزيد من التحكم في بيئة التشغيل ونظام الملفات.

لمزيد من المعلومات، مشاريع مثل واسم كلاود و WasmEdge نعمل على تطوير WebAssembly ليصبح منصة حوسبة قابلة للتطبيق.

حالات استخدام Wasm

هناك العديد من حالات الاستخدام لـ WebAssembly، نظرًا لطبيعته الغريبة. ويمكن تقسيمها إلى ثلاث مجموعات رئيسية؛ داخل المتصفح، وخارج المتصفح، والإعدادات الهجينة.

إن نوع المتصفح واضح بذاته، بينما يشير خارج المتصفح في الغالب إلى عمليات النشر على الخادم وإنترنت الأشياء والسحابة، بينما يشير الهجين إلى مزيج من الاثنين.

فيما يلي نظرة على حالات الاستخدام التي يمكن أن يتفوق فيها Wasm:

  • كود عالي الأداء موجود بالفعل - كود قديم ولكنه رائع يمكنك نقله إلى WebAssembly.
  • كود جديد عالي الأداء - تلك التي يتعين عليك تصميمها وتنفيذها من الصفر.
  • نقل تطبيقات سطح المكتب إلى الويب - قد يؤدي هذا إلى فتح جيل جديد من حلول سطح المكتب المستندة إلى الويب، مثل تحرير الفيديو عبر الويب.
  • الحوسبة السحابية - العمل جنبًا إلى جنب مع Docker وKubernetes للحصول على فرص جديدة.

فيما يلي نظرة على التطبيقات والسيناريوهات المحددة التي يمكن أن يتفوق فيها Wasm:

  • تحرير الفيديو والصور
  • تصميم اللعبة
  • تطبيقات الذكاء الاصطناعي
  • تطبيقات الواقع الافتراضي والمعزز
  • تطبيقات الموسيقى
  • تطبيقات P2P
  • تطبيقات جانب الخادم
  • الحسابات السحابية/المجموعية
  • التصميم بمساعدة الحاسوب
  • محاكاة منصة نظام التشغيل
  • التشفير
  • خادم الويب المحلي
  • تطبيقات سطح المكتب البعيد
  • التصورات العلمية
  • تطبيقات أصلية هجينة على الهواتف الذكية
  • على أجهزة إنترنت الأشياء

قائمة اللغات والأطر المدعومة

يتم تجميع أكثر من 50 لغة في WebAssembly، وفيما يلي بعض اللغات الأكثر شهرة:

  • C
  • C + +
  • R
  • روبي
  • سويفت
  • Go
  • كوتلن
  • Rust
  • PHP
  • Blazor - إطار عمل لمطوري .NET.
  • تجميع ويب - مُجمِّع لبايت كود Java واللغات ذات الصلة مثل JRuby وJython وGroovy وScala وKotlin.
  • خشب الطقسوس - إطار عمل Rust لإنشاء تطبيقات ويب متعددة الخيوط باستخدام WebAssembly.
  • أسيمبلي سكريبت - لغة مصممة خصيصًا لإنشاء كود WebAssembly.
  • حبوب - لغة وظيفية ذات نوعية قوية.
  • موتوكو

يمكنك العثور على المزيد من اللغات هنا.

قائمة بيئات تشغيل وأدوات WebAssembly

  • جميع المتصفحات الرئيسية تدعم Wasm
  • بيوديد - وقت تشغيل Python على المتصفح باستخدام الحزمة العلمية Python، بما في ذلك Pandas وNumPy وSciPy.
  • وامر
  • واجي - للخدمات المصغرة وتطبيقات الويب
  • هل كنت - واجهة النظام المعيارية
  • وسام تايم - وقت تشغيل WebAssembly سريع وآمن.
  • غسالة
  • لوسيت
  • كان كلاود - بيئة سحابية
  • كروستليت – Kubernetes kublete لتشغيل Wasm، مكتوب بلغة Rust.
  • WasmEdge - بيئة تشغيل سحابية وحافة

الخاتمة

لقد وصلنا إلى نهاية رحلتنا مع WebAssembly وما يحمله من فوائد للحوسبة. وكما ترى، فهو يحمل الكثير من الوعود.

إنه لا يزال قيد التطوير ولكن في طور التطوير المستمر. وإذا كنت مهتمًا، يمكنك العثور على مزيد من المعلومات هنا, هناو هنا.

ننامدي أوكيكي

ننامدي أوكيكي

ننامدي أوكيكي هو من عشاق الكمبيوتر ويحب قراءة مجموعة كبيرة من الكتب. يفضل Linux على Windows/Mac وكان يستخدمه
أوبونتو منذ بداياته. يمكنك متابعته على تويتر عبر بونجوتراكس

المقالات: 297

تلقي المواد التقنية

اتجاهات التكنولوجيا، واتجاهات الشركات الناشئة، والمراجعات، والدخل عبر الإنترنت، وأدوات الويب والتسويق مرة أو مرتين شهريًا