שיפור הגישה ל-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 עדיין מתפתח כתקן, והדפדפנים ממשיכים להתרחב עם עוד תכונות ופונקציות. מנקודת המבט של Earth, ההבדל המשמעותי ביותר בתמיכה ב-WebAssembly בין הדפדפנים הוא התמיכה בשרשור. חלק מהדפדפנים מציעים תמיכה במספר תהליכים בו-זמנית, וחלקם לא. אפשר לחשוב על כדור הארץ כמשחק וידאו ענק תלת-ממדי של העולם האמיתי. לכן אנחנו שולחים נתונים לסטרימינג לדפדפן באופן קבוע, מפיקים אותם מהקידוד ומכינים אותם לעיבוד (רנדרינג) במסך. היכולת לבצע את העבודה הזו בשרשור רקע הוכיחה שיפור ברור בביצועים של Earth בדפדפן.
WebAssembly מרובה-השרשורים מסתמך על תכונת דפדפן שנקראת SharedArrayBuffer, שהוסרה מדפדפנים אחרי שהתגלו נקודות החולשה באבטחה של Spectre ו-Meltdown. כדי לצמצם את הנזק הפוטנציאלי מתקפות, צוות האבטחה של Chrome הציג את התכונה 'בידוד של אתר' ב-Chrome לכל מערכות ההפעלה למחשב. התכונה 'בידוד של אתר' מגבילה כל תהליך רינדור למסמכים מאתר יחיד. בעקבות הוספת תכונת האבטחה הזו, Chrome הפעיל מחדש את SharedArrayBuffer למחשב – מה שאיפשר לנו להשתמש ב-WebAssembly במספר שרשורים עם Earth ל-Chrome.
בדפדפנים אחרים פועלים על Site Isolation או על אמצעי מיטיגציה אחרים כדי להפעיל מחדש את 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 תחזיר את התמיכה במספר תהליכים במקביל בגרסאות עתידיות. הצד החיובי הוא ש-Firefox תומך בהקצאת זיכרון דינמית.
אופרה
הדפדפן Opera מבוסס על Chromium, בדיוק כמו Chrome, וגם הגרסאות הבאות של Edge. עם זאת, בגרסה הנוכחית של Opera יש תמיכה ב-WebAssembly רק בשרשור יחיד. אפליקציית Earth פועלת ב-Opera, אבל חוויית השימוש בה פחות טובה. אנחנו מקווים שבגרסאות חדשות יותר של Opera תהיה תמיכה במספר תהליכים בו-זמנית ותמיכה חזקה יותר ב-WebAssembly.
Safari
ב-Safari יש הטמעה חזקה של WebAssembly, אבל אין בו תמיכה מלאה ב-WebGL2. לכן, Earth עם WebAssembly לא פועל ב-Safari. באופן ספציפי, חלק מהשידרוגים שלנו דורשים את GLSL 1.2. אנחנו מקווים ש-Earth תהיה זמינה גם ב-Safari, אחרי שנוסיף תמיכה טובה יותר ב-WebGL2.
אנחנו מצפים לשימוש נרחב יותר בתכונות של WebAssembly
עברנו דרך ארוכה כדי להפוך את Earth לזמין באינטרנט. לפני כ-6 שנים התחלנו עם הדגמה פנימית ראשונית מבוססת asm.js, ששמרנו עליה והרחבנו אותה לאורך השנים. לאחר מכן, הוא הוסב לגרסה של Earth ב-WebAssembly, כי WebAssembly הפך לתקן שאושר על ידי W3C.
עדיין יש לנו דרך ארוכה לעבור עם WebAssembly ו-Earth. באופן ספציפי, אנחנו רוצים לעבור לקצה העורפי של LLVM באמצעות Emscripten (כלי הפיתוח ליצירת WebAssembly מקוד C++). השינוי הזה יאפשר תמיכה עתידית ב-SIMD, וגם כלים חזקים יותר לניפוי באגים, כמו מפות מקור לקוד בשפת המקור. אנחנו מקווים גם לראות שימוש ב-OffscreenCanvas ותמיכה מלאה בהקצאת זיכרון דינמי ב-WebAssembly. אבל אנחנו יודעים שאנחנו בדרך הנכונה: WebAssembly הוא העתיד לטווח הארוך של Earth באינטרנט.
כדאי להקדיש כמה רגעים כדי לנסות את beta שלנו. נשמח לשמוע מה דעתך על התכונה. אפשר להשאיר משוב ישירות ב-Earth.