איך אנחנו מביאים את Google Earth לאינטרנט

שיפור הגישה ל-Google Earth בדפדפנים שונים באמצעות WebAssembly.

Jordon Mears
Jordon Mears

בעולם אידיאלי, כל אפליקציה שמפתחים בונים, ללא קשר לטכנולוגיה, תהיה זמינה בדפדפן. אבל קיימים חסמים להשקת פרויקטים באינטרנט, בהתאם לטכנולוגיה שבה הם נבנו ולמידת היעילות של הטכנולוגיה הזו נתמכת על ידי ספקי הדפדפנים השונים. WebAssembly (Wasm) הוא יעד הידור שמותאם לפי תקן W3C. הוא מאפשר לנו להריץ מסדי נתונים משפות אחרות מלבד JavaScript באינטרנט כדי לפתור את הבעיה.

עשינו את זה בדיוק עם Google Earth, שזמין היום בגרסת בטא של תצוגה מקדימה ב-WebAssembly. חשוב לזכור שזו עדיין גרסת בטא של Google Earth, והיא עשויה להיות חלקה כמו קודם לכן (כדאי לנסות את הגרסה הרגילה של Earth לאינטרנט). אפשר להתנסות בגרסת הבטא הזו ב-Chrome ובדפדפנים אחרים המבוססים על Chromium, כולל Edge (גרסת Canary) ו-Opera, וגם ב-Firefox. גרסת הבטא הזו יכולה לתת השראה אם גם אתם מחפשים תמיכה טובה יותר בדפדפנים שונים לאפליקציות הספציפיות לפלטפורמה שלכם.

למה בחרנו ב-WebAssembly עבור Google Earth

במקור כתבנו את רוב התוכן של Google Earth ב-C++ מאחר שזו הייתה אפליקציה למחשב שמיועדת להתקנה. אחר כך הצלחנו להעביר אותו ל-Android ול-iOS בזמן שסמארטפונים תפסו אותו. השאירו את רוב ה-codebase של C++ באמצעות NDK ו-Objective-C++. ב-2017, כשהבאנו את Earth לאינטרנט, השתמשנו ב-Native Client (NaCl) כדי להדר את קוד C++ ולהפעיל אותו בדפדפן Chrome.

בזמנו, NaCl הייתה טכנולוגיית הדפדפנים היחידה שאפשרה להעביר את קוד C++ לדפדפן ולהעניק לנו את הביצועים הנדרשים ל-Earth. למרבה הצער, NaCl הייתה טכנולוגיה של Chrome בלבד שאף פעם לא הייתה אפשרות לאמץ אותה בדפדפנים שונים. עכשיו אנחנו מתחילים לעבור ל-WebAssembly, שמאפשר לנו להשתמש באותו קוד ולהפעיל אותו בדפדפנים שונים. המשמעות היא ש-Earth יהיה זמין ליותר אנשים באינטרנט.

צילום מסך של כדור הארץ של מגדל אייפל

שרשור בשרשור

WebAssembly עדיין מתפתח כסטנדרט, והדפדפנים ממשיכים להתרחב עם עוד תכונות ופונקציות. מבחינת Google Earth, ההבדל המשמעותי ביותר בתמיכה ב-WebAssembly בין דפדפנים הוא תמיכה בשרשור. חלק מהדפדפנים תומכים בריבוי שרשורים ויש שלא. כדור הארץ הוא כמו משחק וידאו תלת-ממדי ענק של העולם האמיתי. לכן, אנחנו משדרים באופן רציף נתונים לדפדפן, מנתקים אותו ומכינים אותו לעיבוד במסך. האפשרות לבצע את הפעולה הזו על שרשור ברקע הראתה שיפור ברור בביצועים של Earth בדפדפן.

WebAssembly עם ריבוי שרשורים מסתמך על תכונת דפדפן בשם SharedArrayBuffer, שנשלפה מדפדפנים לאחר שנחשפו מנקודות החולשה באבטחה של Spectre ו-Meltdown. כדי לצמצם נזק אפשרי ממתקפות, צוות האבטחה של Chrome השיק את 'בידוד של אתר' ב-Chrome לכל מערכות ההפעלה במחשב. בידוד של אתר מגביל כל תהליך של כלי הרינדור, למסמכים מאתר יחיד. אחרי שהוספנו את תכונת האבטחה הזו, Chrome הפעיל מחדש את SharedArrayBuffer לשולחן העבודה – וכך יכולנו להשתמש ב-WebAssembly עם שרשורים מרובים ב-Earth עבור Chrome.

דפדפנים אחרים עובדים על 'בידוד של אתר' או הקלות אחרות כדי להפעיל מחדש את SharedArrayBuffer. בינתיים, Google 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. אמנם כדור הארץ פועל ב-Opera, אבל החוויה נפגעת במידה מסוימת. אני מקווה שגרסאות חדשות יותר של Opera יתמכו בשרשורים מרובים (multi-threads) ובתמיכה מתקדמת יותר ב-WebAssembly.

Safari

ב-Safari יש יישום חזק של WebAssembly, אבל אין בו תמיכה מלאה ב-WebGL2. לכן, Earth עם WebAssembly לא יפעל ב-Safari. באופן ספציפי, חלק מתוכנות ההצללה שלנו מחייבות GLSL 1.2. אנחנו מקווים ש-Earth יהיה זמין גם ב-Safari, כשנוסיף תמיכה טובה יותר ב-WebGL2.

מצפה לאמץ עוד יותר את התכונות של WebAssembly

עברנו תהליך ארוך עד ש-Google Earth יהיה זמין באינטרנט. לפני כשש שנים, התחלנו עם הדגמה פנימית המבוססת על asm.js, שנשמרה והורחבה לאורך השנים. לאחר מכן היא הוסבה לגרסת WebAssembly של Earth, ככל ש-WebAssembly הפך לתקן שאומץ על ידי W3C.

יש לנו עדיין דרכים להשתמש ב-WebAssembly וב-Earth. באופן ספציפי, אנחנו רוצים לעבור לקצה העורפי של LLVM באמצעות Emscripten (שרשרת הכלים ליצירת WebAssembly מקוד C++ ). השינוי הזה יאפשר תמיכה ב-SIMD בעתיד, וכן כלים חזקים יותר לניפוי באגים, כמו מפות מקור לקוד בשפת המקור. דברים נוספים שאנחנו מקווים לראות הם שימוש ב-OffscreenCanvas ותמיכה מלאה בהקצאת זיכרון דינמית ב-WebAssembly. אבל אנחנו יודעים שאנחנו בדרך הנכונה: WebAssembly הוא העתיד בטווח הארוך של Earth באינטרנט.

כדאי להקדיש רגע ולנסות את גרסת הבטא שלנו. נשמח לשמוע איך זה עובד עליכם – פשוט שולחים משוב ישירות ב-Earth.