تحسين الوصول عبر المتصفحات إلى Google Earth باستخدام WebAssembly
في عالم مثالي، سيكون كل تطبيق ينشئه المطوّرون، بغض النظر عن التكنولوجيا، متاحًا في المتصفّح. ولكن هناك حواجز أمام جلب المشروعات إلى الويب، اعتمادًا على التقنية التي تم تصميمها بها ومدى دعم هذه التقنية من قبل موردي المتصفحات المختلفين. WebAssembly (Wasm) هو هدف تجميع ووحيد من قِبل W3C والذي يساعدنا في حل هذه المشكلة من خلال السماح لنا بتشغيل قواعد الترميز من لغات أخرى غير JavaScript على الويب.
لقد تم إجراء ذلك بالضبط باستخدام Google Earth، المتاح حاليًا في الإصدار التجريبي من المعاينة على WebAssembly. تذكر أن هذا لا يزال إصدارًا تجريبيًا من Google Earth وقد لا يكون سلسًا كما كنت معتادًا (جرِّب Earth للويب العادي). يمكنك تجربة هذا الإصدار التجريبي في Chrome والمتصفحات الأخرى التي تستند إلى Chromium، بما في ذلك Edge (إصدار Canary) وOpera، بالإضافة إلى Firefox. يمكنك اعتبار هذا الإصدار التجريبي مصدر إلهام لك إذا كنت أيضًا تبحث عن دعم أفضل عبر المتصفحات لتطبيقاتك الخاصة بالنظام الأساسي.
أسباب اختيارنا WebAssembly لبرنامج Google Earth
لقد كتبنا في الأصل معظم محتوى Google Earth بلغة C++ لأنه كان تطبيقًا متوافقًا مع أجهزة سطح المكتب تم تصميمه للتثبيت. ثم تمكّنا من نقله إلى نظامَي التشغيل Android وiOS أثناء احتجاز الهواتف الذكية، ما ساهم في الاحتفاظ بمعظم قواعد ترميز C++ باستخدام NDK وObjective-C++. في عام 2017، عندما طرحنا Earth على الويب، استخدمنا Native Client (NaCl) لتجميع رمز C++ وتشغيله في متصفح Chrome.
وفي ذلك الوقت، كانت تقنية NaCl هي تقنية المتصفح الوحيدة التي أتاحت لنا نقل رمز C++ إلى المتصفح ومنحنا مستوى الأداء الذي يحتاجه تطبيق Earth. لكن للأسف، كانت تقنية NaCl تعتمد على Chrome فقط ولم يتم اعتمادها مطلقًا في المتصفحات. والآن نحن بصدد التبديل إلى WebAssembly، الذي يتيح لنا استخدام الرمز نفسه وتشغيله عبر المتصفحات. وهذا يعني أن Earth سيكون متاحًا للمزيد من الأشخاص على الويب.
سلسلة محادثات عن سلاسل المحادثات
ولا تزال WebAssembly تتطور كمعيار، ولا تزال المتصفحات تتوسع بالمزيد من الميزات والوظائف. من منظور كوكب الأرض، يتمثل الاختلاف الأكثر أهمية في دعم WebAssembly بين المتصفحات في دعم سلسلة التعليمات. توفر بعض المتصفحات دعم سلاسل التعليمات المتعددة والبعض الآخر لا يتيح ذلك. فكر في الأرض كلعبة فيديو ثلاثية الأبعاد ضخمة للعالم الحقيقي. ومن هذا المنطلق، نعمل باستمرار على بث البيانات إلى المتصفح، وفك ضغطها وتجهيزها للعرض على الشاشة. لقد أظهرت القدرة على إجراء هذا على سلسلة محادثات في الخلفية تحسُّنًا واضحًا في أداء Earth في المتصفّح.
تعتمد تجميع WebAssembly متعدد السلاسل على ميزة متصفح تسمى SharedArrayBuffer، والتي تم سحبها من المتصفحات بعد الكشف عن الثغرات الأمنية Spectre و Meltdown. للحدّ من الضرر المحتمل الناجم عن الهجمات، قدّم فريق الأمان في Chrome ميزة عزل المواقع الإلكترونية في Chrome لجميع أنظمة تشغيل أجهزة الكمبيوتر المكتبي. تعمل ميزة "عزل الموقع" على تقييد كل عملية عارض لتتضمّن المستندات من موقع إلكتروني واحد. مع تفعيل ميزة الأمان هذه، أعاد Chrome تفعيل SharedArrayBuffer لأجهزة الكمبيوتر المكتبي، ما أتاح لنا استخدام WebAssembly متعدد السلاسل مع Earth for Chrome.
تعمل المتصفحات الأخرى على ميزة "عزل المواقع الإلكترونية" أو غيرها من إجراءات التخفيف لإعادة تفعيل SharedArrayBuffer. في الوقت الحالي، يُشغّل Earth سلسلة تعليمات واحدة في هذه المتصفحات.
كيفية عمل WebAssembly مع المتصفحات المختلفة
لقد تعلمنا الكثير عن حالة دعم WebAssembly في المتصفحات التي تنقل Earth. إذا كنت بصدد تطوير تطبيقات باستخدام WebAssembly، فمن المهم فهم الحالة الحالية لكيفية عمل WebAssembly مع المتصفحات المختلفة.
Edge
اقتربت Edge من أن تصبح تجربتي تطوير مختلفتين بناءً على اختيار Microsoft للانتقال من عارض EdgeHTML إلى عارض يستند إلى Chromium. في الوقت الحالي، لن يتم تشغيل الإصدار التجريبي من Google Earth على WebAssembly في الإصدار العام الحالي من Edge نظرًا لعدم توافقه مع WebGL2. وسيتم إصلاح ذلك بمجرد شحن الإصدار الجديد من Edge، المستنِد إلى Chromium، في المستقبل القريب. في هذه الأثناء، يمكنك تنزيل إصدار Canary من Edge والتأكد من أن Earth يعمل بشكل جيد.
Chrome
يدعم Chrome بشكل قوي WebAssembly، بما في ذلك سلاسل التعليمات المتعددة على سطح المكتب، لذلك يمكنك توقع تشغيل Earth بشكل أكثر سلاسة نتيجة لذلك. ونتطلّع مع ذلك إلى أن يضيف Chrome الدعم لتخصيص الذاكرة الديناميكية باستخدام سلاسل المحادثات المتعددة في WebAssembly. وحتى ذلك الحين، قد يتعذّر بدء تشغيل Earth على الأجهزة ذات الذاكرة المحدودة (مثل الأجهزة التي تعمل بالإصدار 32 بت).
Firefox
يقدم Firefox دعمًا جيدًا لـ WebAssembly، لكنه أوقف الدعم للترابط التسلسلي المتعدد. ونتيجة لذلك، قد يكون أداء التجربة أبطأ في تطبيق Earth. ونتطلّع إلى أن تعيد Mozilla الدعم للترابط التسلسلي المتعدد في الإصدارات المستقبلية. وعلى الجانب الآخر، يدعم فايرفوكس التخصيص الديناميكي للذاكرة.
أوبرا
يستند Opera إلى Chromium تمامًا مثل Chrome، إلى جانب الإصدارات القادمة من Edge. ومع ذلك، فإن الإصدار الحالي من Opera لا يتيح سوى توافق WebAssembly مع سلسلة تعليمات واحدة. يعمل Earth في Opera، ولكنه في تجربة متدهورة إلى حدٍ ما. نأمل أن تتوافق الإصدارات الأحدث من Opera على الترابط المتعدد الترابط ويقدم استخدام WebAssembly بشكل أكثر فعالية.
Safari
لدى Safari تطبيق قوي لـ WebAssembly، لكنه يفتقر إلى الدعم الكامل لـ WebGL2. ولذلك، لا يتم تشغيل Earth with WebAssembly في Safari. على وجه التحديد، تتطلب بعض أدوات التظليل لدينا GLSL 1.2. نأمل أن يكون تطبيق Earth متاحًا على متصفّح Safari أيضًا، ولكن بعد توفير إمكانية استخدام WebGL2 بشكل أفضل.
نتطلع إلى المزيد من استخدام ميزات WebAssembly
لقد مرت فترة طويلة لإتاحة استخدام Earth على الويب. قبل حوالي ست سنوات، بدأنا بعرض إصدار تجريبي داخلي أوّلي مستند إلى asm.js، وتم الاحتفاظ به وتوسيعه على مدار السنوات. ثم تم تحويله إلى إصدار WebAssembly للأرض، حيث أصبح WebAssembly معيار W3C.
لا يزال لدينا طرق لاستخدام WebAssembly و Earth. على وجه التحديد، نود الانتقال إلى الواجهة الخلفية LLVM باستخدام Emscripten (سلسلة الأدوات لإنشاء WebAssembly من كود C++). وسيؤدّي هذا التغيير إلى إتاحة إمكانية استخدام شريحة SIM معيَّنة في المستقبل، بالإضافة إلى توفير أدوات أكثر فعالية لتصحيح الأخطاء، مثل خرائط المصدر لرمز اللغة المصدر. ومن الأمور الأخرى التي نأمل أن نصادفها هي استخدام OffscreenCanvas والدعم الكامل لتخصيص الذاكرة الديناميكي في WebAssembly. لكننا نعلم أننا نسير على الطريق الصحيح: WebAssembly هو مستقبل Earth على الويب طويل المدى.
يُرجى تخصيص بعض الوقت لتجربة الإصدار التجريبي. أعلِمنا بكيفية الاستفادة من هذه الأداة من خلال إضافة ملاحظاتك مباشرةً في Earth.