WebAssembly (Wasm) هي تقنية يتم شحنها في جميع المتصفحات الحديثة والتي تتيح للمطورين شحن برامج ثنائية محمولة.
هذا يعني أنه يمكن للمطورين استخدام أي لغة برمجة تقريبًا واستهداف الويب.
في سياق Discourse، يفتح هذا الباب لشحن مجموعة غنية إلى حد ما من الملحقات التي كانت متاحة فقط لمنشئي الإضافات في الماضي.
يمكن أن تشمل الأمثلة:
وضع علامات مائية على الصور / تغيير حجمها / قصها
إنشاء الرسوم البيانية باستخدام graphviz أو svgbob
صناديق الرمل البرمجية (على سبيل المثال: مشاركات تتضمن وقت تشغيل Ruby)
وأكثر من ذلك بكثير
في الماضي، وبسبب سياسة أمان المحتوى في Discourse، تم إيقاف الوصول إلى Wasm باستثناء التثبيتات التي تحتوي على تحميلات محلية ولا تستخدم شبكة توصيل المحتوى (CDN).
تمت إضافة واجهات جديدة إلى جانب العميل لدعم شحن أصول JavaScript في سمة يمكن الوصول إليها بشكل غير مشروط عبر النطاق المحلي.
هذا يمكّن مطوري السمات من استضافة Wasm بشكل نظيف، والتدفق هو:
مكون → عامل ويب محلي → Wasm مستضاف على شبكة توصيل المحتوى (CDN)
ليس متعلقًا بـ wasm على وجه التحديد، ولكني وجدت شيئًا آخر مثيرًا للاهتمام حول هذا الرمز، هل هو جديد؟
في مثالك، لم يعد loadScript مطلوبًا؟ (أعتقد أن الاستيراد زائد عن الحاجة؟):
وبدلاً من ذلك، يتم تحميل البرنامج النصي للعامل JIT عندما يُكتشف أن العامل غير موجود؟
باستخدام عنوان URL المبني من مرجع الأصول.
هذا نمط جيد ومفيد للغاية!
ومع ذلك، لدي سؤال حول العمال.
إذا استخدمت برنامجًا نصيًا لعامل طرف ثالث، وكان يحتوي على عبارات importScripts() لتضمين برامج نصية إضافية في النطاق العام للعامل، فكيف أقوم بتضمين هذه البرامج النصية للاستيراد داخل مكون السمة؟
قد أكون أسأل: كيف نطلب برنامجًا نصيًا من عنوان URL داخل مكون سمة Discourse؟
ما فعلته في هذا السيناريو هو استخدام postMessage من البرنامج النصي الرئيسي لـ JS مع عناوين URL المراد استيرادها. يتم استقبال هذا في معالج الرسائل في العامل الذي يمكنه importScript عناوين URL المستلمة.
أنا أستخدم منشئ السمات لإنشاء مكون سمة جديد من المفترض أن يستخدم wasm. كنقطة انطلاق، حاولت تحميل svgbob كمكون سمة. ومع ذلك، لم يُسمح لي بذلك، لأنه يحتوي على ملف wasm.
هل هذا قيد مقصود لمنشئ السمات؟ أم لا يمكن للمرء تثبيت svgbob كما هو؟
إنه مسموح به في السمات افتراضيًا. لقد تم تغيير إعداد الموقع فقط على discourse.theme-creator.io. (هذا موقع discourse عادي، مع إضافة تسمح لأي شخص بتحميل ومشاركة السمات).
لا يزال WASM محصورًا في المتصفح، لذا فإن التعرض الأمني يعادل ملف .js.