WebAssembly की मदद से, Google Earth में क्रॉस-ब्राउज़र के ऐक्सेस को बेहतर बनाना.
एक आदर्श दुनिया में, डेवलपर का बनाया हुआ हर ऐप्लिकेशन ब्राउज़र में उपलब्ध होता है, चाहे वह टेक्नोलॉजी कुछ भी हो. हालांकि, प्रोजेक्ट को वेब पर लाने में कई रुकावटें हैं. यह इस बात पर निर्भर करता है कि उन्हें किस टेक्नोलॉजी के साथ बनाया गया था और वह टेक्नोलॉजी अलग-अलग ब्राउज़र वेंडर के साथ कितनी अच्छी तरह से काम करती है. WebAssembly (Wasm) एक कंपाइल टारगेट है. इसे W3C ने तय किया है. यह हमें JavaScript के अलावा, वेब पर अन्य भाषाओं के कोडबेस चलाने की अनुमति देकर, इस समस्या को हल करने में हमारी मदद करता है.
हमने Google Earth के साथ यही काम किया है. आज यह WebAssembly पर झलक के बीटा वर्शन में उपलब्ध है. ध्यान रखें कि यह अब भी Google Earth का बीटा वर्शन है. इसलिए, हो सकता है कि यह पहले के मुकाबले ज़्यादा आसान न हो. नियमित तौर पर, Earth for web को आज़माएं. इस बीटा वर्शन को Chrome और Chromium पर आधारित अन्य ब्राउज़र में इस्तेमाल किया जा सकता है. इनमें Edge (कैनरी वर्शन) और Opera शामिल हैं. इसके अलावा, Firefox ब्राउज़र पर भी इसे इस्तेमाल किया जा सकता है. अगर आपको भी अपने प्लैटफ़ॉर्म के हिसाब से बने ऐप्लिकेशन पर अलग-अलग ब्राउज़र पर बेहतर सहायता चाहिए, तो इस बीटा वर्शन को आज़माएं.
हमने Google Earth के लिए WebAssembly को क्यों चुना
Google Earth के ज़्यादातर भाग को हमने मूल रूप से C++ में लिखा था, क्योंकि यह इंस्टॉल करने के लिए बनाया गया एक डेस्कटॉप ऐप्लिकेशन था. इसके बाद, हम इसे Android और iOS पर पोर्ट कर पाए. इस दौरान, हमने NDK और Objective-C++ का इस्तेमाल करके, C++ के ज़्यादातर कोडबेस को सेव कर लिया. साल 2017 में, जब हमने Earth को वेब पर लाया, तब हमने नेटिव क्लाइंट (NaCl) का इस्तेमाल करके C++ कोड को कंपाइल किया और उसे Chrome ब्राउज़र पर चलाया.
उस समय, NaCl ब्राउज़र टेक्नोलॉजी की मदद से, अपने C++ कोड को ब्राउज़र में पोर्ट किया जा सकता था. साथ ही, इसकी मदद से हम Earth के हिसाब से परफ़ॉर्मेंस भी दे पाते थे. माफ़ करें, NaCl सिर्फ़ Chrome पर काम करने वाली एक ऐसी तकनीक थी जिसे सभी ब्राउज़र पर इस्तेमाल नहीं किया गया. अब हम WebAssembly पर स्विच करने जा रहे हैं. इससे हम वही कोड ले सकते हैं और उसे सभी ब्राउज़र पर चला सकते हैं. इसका मतलब है कि Earth, वेब पर ज़्यादा लोगों के लिए उपलब्ध होगा.
थ्रेड की सुविधा से जुड़ी थ्रेड
WebAssembly अब भी एक स्टैंडर्ड के तौर पर बेहतर बनाया जा रहा है. साथ ही, ब्राउज़र में नई सुविधाएं और फ़ंक्शन लगातार जोड़े जा रहे हैं. Earth के हिसाब से, ब्राउज़र के बीच WebAssembly के साथ काम करने में सबसे बड़ा अंतर, थ्रेडिंग को सपोर्ट करने वाला है. कुछ ब्राउज़र एक से ज़्यादा थ्रेड की सुविधा देते हैं और कुछ नहीं. Earth को असल दुनिया के एक बड़े 3D वीडियो गेम की तरह देखें. इसलिए, हम डेटा को लगातार ब्राउज़र पर स्ट्रीम करते हैं और उसे डीकंप्रेस करते हैं और स्क्रीन पर रेंडर होने के लिए तैयार करते हैं. बैकग्राउंड थ्रेड पर यह काम कर पाने से, ब्राउज़र में Earth की परफ़ॉर्मेंस में साफ़ तौर पर सुधार देखने को मिला है.
मल्टी-थ्रेड WebAssembly, SharedArrayBuffer नाम की ब्राउज़र सुविधा पर निर्भर करता है. इसे Spectre और Mailtdown की सुरक्षा से जुड़े जोखिमों के बारे में पता चलने के बाद, ब्राउज़र से लिया गया था. हमलों से होने वाले संभावित नुकसान को कम करने के लिए, Chrome की सुरक्षा टीम ने सभी डेस्कटॉप ऑपरेटिंग सिस्टम के लिए, Chrome में साइट आइसोलेशन की सुविधा शुरू की. 'साइट आइसोलेशन' सुविधा, रेंडर करने की हर प्रोसेस को एक ही साइट के दस्तावेज़ों तक सीमित करती है. इस सुरक्षा सुविधा के साथ, Chrome ने डेस्कटॉप के लिए SharedArrayBuffer को फिर से चालू किया. इससे हमें Chrome के लिए Earth के साथ, मल्टी-थ्रेड WebAssembly का इस्तेमाल करने की सुविधा मिली.
अन्य ब्राउज़र, SharedArrayBuffer को फिर से चालू करने के लिए, साइट आइसोलेशन या अन्य खतरों पर काम कर रहे हैं. इस दौरान, Earth उन ब्राउज़र पर सिंगल-थ्रेड चलाता है.
WebAssembly अलग-अलग ब्राउज़र के साथ कैसे काम करता है
हमने Earth को पोर्ट करने वाले ब्राउज़र में WebAssembly के काम करने की स्थिति के बारे में बहुत कुछ सीखा है. अगर WebAssembly का इस्तेमाल करके ऐप्लिकेशन डेवलप किए जा रहे हैं, तो यह समझना ज़रूरी है कि अलग-अलग ब्राउज़र के साथ WebAssembly कैसे काम करता है.
Edge
Microsoft की पसंद के आधार पर Edge, डेवलपमेंट के दो अलग-अलग अनुभव बनने की कगार पर है. इसके लिए, EdgeHTML रेंडरर से Chromium पर आधारित रेंडरर का इस्तेमाल किया जाएगा. फ़िलहाल, WebGL2 के लिए सुविधा उपलब्ध न होने की वजह से, WebAssembly पर Google Earth का बीटा वर्शन, Edge के मौजूदा सार्वजनिक वर्शन पर नहीं चलेगा. यह समस्या तब ठीक हो जाएगी, जब Chromium के आधार पर, Edge का नया वर्शन आने वाले समय में शिप कर दिया जाएगा. इस दौरान, Edge का कैनरी वर्शन डाउनलोड किया जा सकता है. इससे यह पता चलेगा कि Earth सही तरीके से काम कर रहा है या नहीं.
Chrome
Chrome, WebAssembly के साथ काम करता है. इसमें डेस्कटॉप पर एक से ज़्यादा थ्रेड की सुविधा भी शामिल है. इसलिए, आप Earth के आसानी से चलने की उम्मीद कर सकते हैं. हालांकि, उम्मीद है कि Chrome, WebAssembly में मल्टी-थ्रिंग की सुविधा के साथ डाइनैमिक मेमोरी ऐलोकेशन के साथ काम करने की सुविधा जोड़ेगा. तब तक, हो सकता है कि Earth सीमित मेमोरी वाले डिवाइसों (जैसे कि 32-बिट मशीन) से शुरू न हो पाए.
Firefox
Firefox WebAssembly के लिए अच्छा काम करता है. हालांकि, एक से ज़्यादा थ्रेड की सुविधा बंद कर दी गई है. इस वजह से, हो सकता है कि आपको Earth का इस्तेमाल करने में ज़्यादा समय लगे. हमें उम्मीद है कि आने वाले वर्शन में Mozilla से एक से ज़्यादा थ्रेड की सुविधा फिर से उपलब्ध कराई जाएगी. उलटी तरफ़, Firefox डाइनैमिक मेमोरी असाइन करने की सुविधा देता है.
Opera
Chrome की तरह ही Opera, Edge के आने वाले वर्शन पर भी काम करता है और यह Chromium पर आधारित होता है. हालांकि, Opera का मौजूदा वर्शन WebAssembly के लिए सिर्फ़ सिंगल-थ्रेड की सुविधा देता है. Earth ऑपरा में तो चलता है, लेकिन यह बहुत खराब अनुभव है. उम्मीद है कि Opera के नए वर्शन में, एक से ज़्यादा थ्रेड की सुविधा और ज़्यादा मज़बूत WebAssembly की सुविधा काम करेगी.
Safari
Safari में WebAssembly का बेहतर तरीके से इस्तेमाल किया गया है, लेकिन यह WebGL2 के साथ काम नहीं करता. इसलिए, Safari में Earth के WebAssembly के साथ काम करने की सुविधा नहीं है. खास तौर पर, हमारे कुछ शेडर के लिए जीएलएसएल 1.2 ज़रूरी है. हमें उम्मीद है कि जब WebGL2 के लिए बेहतर सुविधा उपलब्ध कराई जाएगी, तब Earth को Safari पर भी देखा जा सकेगा.
हम WebAssembly की सुविधाओं को और ज़्यादा इस्तेमाल करने की उम्मीद करते हैं
Earth को वेब पर उपलब्ध कराने के लिए, यह बहुत लंबा रास्ता है. करीब छह साल पहले हमने asm.js पर आधारित शुरुआती डेमो के साथ शुरुआत की थी. इस डेमो को लंबे समय तक बनाए रखा गया और इसका दायरा बढ़ाया गया. इसके बाद, इसे Earth के WebAssembly बिल्ड में बदल दिया गया. इसके बाद, WebAssembly, W3C से स्वीकार किया गया मानक बन गया.
हमारे पास अब भी WebAssembly और Earth का इस्तेमाल करने का तरीका है. खास तौर पर, हम Emscripten (C++ कोड से WebAssembly जनरेट करने के लिए टूलचेन) का इस्तेमाल करके LLVM बैकएंड पर जाना चाहते हैं. इस बदलाव से, आने वाले समय में सिमडी का इस्तेमाल करने की सुविधा चालू हो जाएगी. साथ ही, सोर्स-भाषा कोड के लिए सोर्स मैप जैसे मज़बूत डीबग टूल भी चालू हो जाएंगे. हम OffscreenCanvas और WebAssembly में डाइनैमिक मेमोरी ऐलोकेशन के लिए पूरी सहायता देने की उम्मीद करते हैं. हालांकि, हमें पता है कि हम सही राह पर हैं: आने वाले समय में WebAssembly, वेब पर Earth का इस्तेमाल करने के लिए काफ़ी समय से काम करेगा.
कृपया हमारा बीटा वर्शन आज़माएं. सीधे Earth में सुझाव देकर हमें बताएं कि यह आपके लिए कैसे काम करता है.