بهبود دسترسی بین مرورگرها به Google Earth با WebAssembly.
در دنیای ایدهآل، هر برنامهای که توسعهدهندگان میسازند، بدون توجه به فناوری، در مرورگر در دسترس خواهند بود. اما موانعی بر سر راه آوردن پروژه ها به وب وجود دارد، بسته به فناوری ای که با آن ساخته شده اند و اینکه چگونه آن فناوری توسط فروشندگان مختلف مرورگرها پشتیبانی می شود. WebAssembly (Wasm) یک هدف کامپایل استاندارد شده توسط W3C است که به ما کمک می کند این مشکل را حل کنیم و به ما اجازه می دهد تا پایگاه های کد را از زبان هایی غیر از جاوا اسکریپت در وب اجرا کنیم.
ما دقیقاً این کار را با Google Earth انجام دادهایم که امروز در نسخه بتا پیشنمایش در WebAssembly در دسترس است. به خاطر داشته باشید که این هنوز یک نسخه بتای Google Earth است و ممکن است به همان اندازه که قبلاً عادت داشتید نرم و روان نباشد (به طور معمول Earth for web را امتحان کنید). میتوانید این بتا را در Chrome و سایر مرورگرهای مبتنی بر Chromium، از جمله Edge (نسخه Canary) و Opera و همچنین Firefox آزمایش کنید. اگر شما نیز به دنبال پشتیبانی بهتر بین مرورگرها برای برنامه های کاربردی پلتفرم خاص خود هستید، این بتا را الهام بخش خود در نظر بگیرید.
چرا WebAssembly را برای Google Earth انتخاب کردیم
ما در ابتدا بیشتر Google Earth را در C++ نوشتیم زیرا یک برنامه دسکتاپ بود که برای نصب در نظر گرفته شده بود. سپس با استفاده از گوشیهای هوشمند توانستیم آن را به اندروید و iOS منتقل کنیم و بیشتر پایگاه کد C++ خود را با استفاده از NDK و Objective-C++ حفظ کنیم. در سال 2017، زمانی که زمین را به وب آوردیم، از Native Client (NaCl) برای کامپایل کد ++C و اجرای آن در مرورگر کروم استفاده کردیم.
در آن زمان، NaCl تنها فناوری مرورگر بود که به ما اجازه میداد کد ++C خود را به مرورگر منتقل کنیم و عملکرد مورد نیاز زمین را به ما بدهد. متأسفانه، NaCl یک فناوری فقط کروم بود که هرگز در مرورگرها مورد استفاده قرار نگرفت. اکنون ما شروع به تغییر به WebAssembly می کنیم، که به ما امکان می دهد همان کد را بگیریم و آن را در مرورگرها اجرا کنیم. این بدان معناست که زمین برای افراد بیشتری در سراسر وب در دسترس خواهد بود.
یک نخ روی نخ
WebAssembly هنوز به عنوان یک استاندارد در حال پیشرفت است و مرورگرها همچنان با ویژگی ها و عملکردهای بیشتر توسعه می یابند. از دیدگاه زمین، مهمترین تفاوت در پشتیبانی از WebAssembly بین مرورگرها، پشتیبانی از threading است. برخی از مرورگرها پشتیبانی از چند رشته را ارائه می دهند و برخی دیگر پشتیبانی نمی کنند. زمین را مانند یک بازی ویدیویی سه بعدی بزرگ از دنیای واقعی در نظر بگیرید. به این ترتیب، ما دائماً دادهها را به مرورگر پخش میکنیم، آنها را از حالت فشرده خارج میکنیم و برای نمایش روی صفحه آماده میکنیم. توانایی انجام این کار بر روی یک رشته پس زمینه بهبود واضحی در عملکرد Earth در مرورگر نشان داده است.
WebAssembly چند رشتهای متکی به ویژگی مرورگر به نام SharedArrayBuffer است که پس از آشکار شدن آسیبپذیریهای امنیتی Spectre و Meltdown از مرورگرها خارج شد. برای کاهش آسیب احتمالی حملات، تیم امنیتی کروم، Site Isolation را در کروم برای همه سیستمعاملهای دسکتاپ معرفی کرد . Site Isolation هر فرآیند رندر را به اسناد یک سایت محدود می کند. با وجود این ویژگی امنیتی، Chrome SharedArrayBuffer را برای دسکتاپ دوباره فعال کرد—که به ما اجازه میدهد از WebAssembly چند رشتهای با Earth برای Chrome استفاده کنیم.
مرورگرهای دیگر در حال کار بر روی Site Isolation یا سایر اقدامات کاهشی هستند تا SharedArrayBuffer را دوباره فعال کنند. در همین حال، Earth به صورت تک رشته ای در آن مرورگرها اجرا می شود.
نحوه کار WebAssembly با مرورگرهای مختلف
ما چیزهای زیادی در مورد وضعیت پشتیبانی WebAssembly در مرورگرهایی که Earth را منتقل می کنند، آموخته ایم. اگر قصد دارید برنامه هایی را با استفاده از WebAssembly توسعه دهید، درک وضعیت فعلی نحوه کار WebAssembly با مرورگرهای مختلف بسیار مهم است.
حاشیه، غیرمتمرکز
Edge در آستانه تبدیل شدن به دو تجربه توسعه متمایز بر اساس انتخاب مایکروسافت برای انتقال از رندر EdgeHTML به یک رندر مبتنی بر Chromium است. در حال حاضر، بتا Google Earth در WebAssembly در نسخه عمومی فعلی Edge به دلیل عدم پشتیبانی از WebGL2 اجرا نخواهد شد. زمانی که نسخه جدید Edge مبتنی بر Chromium در آینده نزدیک عرضه شود، این مشکل برطرف خواهد شد. در این بین می توانید نسخه Canary Edge را دانلود کنید و ببینید که Earth کاملاً خوب کار می کند.
کروم
Chrome از WebAssembly پشتیبانی قوی دارد، از جمله Multi-threading در دسکتاپ، بنابراین میتوانید انتظار داشته باشید که Earth در نتیجه نرمتر کار کند. با این حال، ما مشتاقانه منتظریم که Chrome برای تخصیص حافظه پویا با چند رشته در WebAssembly پشتیبانی کند. تا آن زمان، ممکن است Earth در دستگاههایی با حافظه محدود (مانند ماشینهای 32 بیتی) راهاندازی نشود.
فایرفاکس
فایرفاکس پشتیبانی خوبی از WebAssembly ارائه می کند، اما پشتیبانی از چند رشته را غیرفعال کرده است. در نتیجه، میتوانید انتظار تجربه آهستهتری با زمین داشته باشید. ما مشتاقانه منتظریم که موزیلا در نسخه های بعدی پشتیبانی از چند رشته ای را بازگرداند. از طرف دیگر، فایرفاکس از تخصیص حافظه پویا پشتیبانی می کند.
اپرا
اپرا همانند کروم بر پایه کرومیوم است، همراه با نسخه های آینده اج. با این حال، نسخه فعلی Opera فقط پشتیبانی تک رشته ای از WebAssembly را ارائه می دهد. Earth در اپرا اجرا میشود، اما با تجربهای تا حدودی ضعیف. امیدواریم نسخههای جدیدتر Opera از پشتیبانی چند رشتهای و قویتر WebAssembly پشتیبانی کنند.
سافاری
سافاری یک پیاده سازی قوی از WebAssembly دارد، اما فاقد پشتیبانی کامل از WebGL2 است. بنابراین، Earth with WebAssembly در سافاری اجرا نمی شود. به طور خاص، برخی از شیدرهای ما به GLSL 1.2 نیاز دارند. امیدواریم با اضافه شدن پشتیبانی بهتر از WebGL2، Earth در سافاری نیز در دسترس باشد.
منتظر پذیرش بیشتر ویژگی های WebAssembly هستیم
راه طولانی برای در دسترس قرار دادن زمین در وب بوده است. حدود شش سال پیش، ما با یک نسخه آزمایشی داخلی اولیه مبتنی بر asm.js شروع کردیم که در طول سال ها نگهداری و گسترش یافت. سپس به یک ساخت WebAssembly از Earth تبدیل شد، زیرا WebAssembly به استاندارد پذیرفته شده W3C تبدیل شد.
ما هنوز راهی برای WebAssembly و Earth داریم. به طور خاص، ما میخواهیم با استفاده از Emscripten (زنجیره ابزار برای تولید WebAssembly از کد C++) به باطن LLVM برویم. این تغییر پشتیبانی از SIMD در آینده و همچنین ابزارهای اشکال زدایی قوی تر مانند نقشه های منبع برای کدهای زبان مبدأ را فعال می کند. موارد دیگری که امیدواریم شاهد آن باشیم، پذیرش OffscreenCanvas و پشتیبانی کامل از تخصیص حافظه پویا در WebAssembly است. اما می دانیم که در مسیر درستی هستیم: WebAssembly آینده بلندمدت زمین در وب است.
لطفاً چند لحظه وقت بگذارید و بتای ما را امتحان کنید. با گذاشتن بازخورد مستقیماً در زمین، به ما اطلاع دهید که چگونه برای شما کار می کند.