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

نشرت: 2022-10-12

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

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

كان الهدف الأصلي لـ 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 SDK.
  2. اكتب نموذج كود helloworld.c الخاص بك أو قم بذلك في C ++ / Rust إذا كنت تفضل ذلك.
  3. قم بتشغيل emcc helloworld.c -s WASM = 1 -s helloworld.html في محطة طرفية لترجمة التعليمات البرمجية إلى WebAssembly باستخدام Emscripten. سيقوم بإنشاء ملفات Wasm binary و 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 (Runtime Environment) لتنفيذ التعليمات البرمجية الخاصة به ، ولكن بخلاف Java ، يمكنك كتابة WebAssembly باللغة التي تختارها.

WebAssembly مقابل JavaScript

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • ج
  • C ++
  • ص
  • روبي
  • سويفت
  • يذهب
  • كوتلن
  • الصدأ
  • بي أتش بي
  • Blazor - إطار عمل لمطوري .NET.
  • JwebAssembly - مترجم لـ Java bytecode واللغات ذات الصلة مثل JRuby و Jython و Groovy و Scala و Kotlin.
  • Yew - إطار عمل Rust لإنشاء تطبيقات ويب متعددة الخيوط باستخدام WebAssembly.
  • AssemblyScript - لغة مصممة خصيصًا لإنشاء رمز WebAssembly.
  • الحبوب - لغة وظيفية مكتوبة بقوة.
  • موتوكو

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

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

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

استنتاج

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

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