لو فتحت Figma على المتصفح وحسّيت إنه أسرع من Adobe XD اللي شغّال desktop على نفس الجهاز، الفرق مش في JavaScript محسّن. الفرق إن Figma بتشغّل أكتر من 90% من كودها بـ WebAssembly، مش JS. ولما Photoshop نزل نسخة ويب سنة 2023، Adobe نفسهم قالوا إن الـ port ده ما كانش ممكن من غير WebAssembly.
ما هو WebAssembly ولماذا يهم المطور العربي في 2026
هنشرحلك في المقال ده يعني إيه WebAssembly، ليه ظهر، فين بيتفوّق على JavaScript، وفين مش هيفيدك أصلاً. هتطلع وانت قادر تقرأ إعلان توظيف فيه "WASM experience" وتعرف هل ده يخصّك ولا لأ.
المشكلة باختصار: ليه JavaScript مش كفاية أصلاً
JavaScript اتعمل سنة 1995 علشان يحرّك صور بسيطة وtooltips على صفحات HTML. مكنش الواحد بيتخيّل إن الناس هتفتح برنامج تصميم كامل أو لعبة 3D في تبويب متصفح. لما المهام دي بدأت تظهر، JS بقى الحلقة الأضعف لأنه:
- بيتفسّر سطر سطر وقت التشغيل (interpreted)، مش متحوّل لكود ماكينة جاهز.
- عنده garbage collector بيتدخّل في أوقات مش متوقعة، وده بيعمل lag في الألعاب.
- أنواع البيانات فيه ديناميكية، يعني الرقم نفسه ممكن يبقى int أو float أو string في نفس الدالة، والمتصفح بيقعد يخمّن.
ولّا ده بمشكلة فعلية: دالة فيها مليون ضرب على أرقام عشرية بتاخد في JS تلت ثانية، نفس الدالة بـ C++ بتاخد 30 مللي ثانية. الفرق 10x مش بسيط لما بترسم 60 frame في الثانية.
مثال يفهمه أي حد: المترجم في المؤتمر الدولي
تخيّل معايا مؤتمر فيه متحدّث صيني وجمهور عربي. عندك خياران:
- مترجم فوري بشري يسمع جملة جملة ويترجمها على البيدا. ده JavaScript: شغّال، لكن فيه تأخير محسوس وبيتعب لو الكلام كتير.
- نص الكلمة كلها مترجم مسبقاً ومعاك ورق، الجمهور بيقرأ في نفس اللحظة اللي بيتكلم فيها المتحدث. ده WebAssembly: الترجمة خلصت قبل ما المؤتمر يبدأ، فالعرض حي وسريع.
WebAssembly مش بديل لـ JavaScript. هو زميل في نفس الصفحة بيشتغل في الحالات اللي JS بيتعب فيها.
التعريف العلمي الدقيق
WebAssembly (اختصاراً Wasm) هو binary instruction format لـ stack-based virtual machine. بكلام واضح: هو صيغة ثنائية مدمجة (مش نص زي JS) بتمثّل كود ماكينة منخفض المستوى، بتشتغل داخل sandbox آمن في أي متصفح حديث. أعلنته مجموعة W3C كمعيار رسمي سنة 2019، وحالياً بتدعمه كل المتصفحات (Chrome, Firefox, Safari, Edge) بنسبة أعلى من 96% من المستخدمين عالمياً حسب CanIUse.
الفكرة الأساسية: المطور بيكتب الكود بلغة سريعة زي Rust أو C++ أو Go، يعمل compile مرة واحدة لملف .wasm، والمتصفح بيشغّل الملف ده بسرعة قريبة من الكود الـ native (يعني الكود اللي شغّال خارج المتصفح).