Poprawa dostępu do Google Earth z różnych przeglądarek za pomocą WebAssembly.
W idealnym świecie każda stworzona przez dewelopera aplikacja, niezależnie od stosowanej technologii, będzie dostępna w przeglądarce. Istnieją jednak przeszkody w przenoszeniu projektów do internetu w zależności od technologii, przy użyciu której zostały stworzone, oraz tego, jak dobrze technologia ta jest obsługiwana przez różnych dostawców przeglądarek. WebAssembly (Wasm) to środowisko kompilacji ustandaryzowane przez W3C, które pomaga nam rozwiązać ten problem, umożliwiając uruchamianie w internecie baz kodu z innych języków niż JavaScript.
Udało nam się to osiągnąć w Google Earth, który jest obecnie dostępny w wersji testowej beta w WebAssembly. Pamiętaj, że jest to wciąż wersja beta Google Earth, więc płynność interfejsu Google Earth może być różna od znanych Ci wcześniej (wypróbuj standardową wersję Earth w przeglądarce). Z tą wersją beta możesz poeksperymentować w Chrome i innych przeglądarkach opartych na Chromium, np. Edge (w wersji Canary) i Operze oraz w przeglądarce Firefox. Wersja beta może być inspiracją, jeśli Ty też szukasz lepszej obsługi aplikacji na poszczególnych platformach w różnych przeglądarkach.
Dlaczego w Google Earth wybraliśmy WebAssembly
Większość zawartości Google Earth napisaliśmy w języku C++, ponieważ była to aplikacja komputerowa przeznaczona do zainstalowania. Następnie przenieśliśmy ją na Androida i iOS, ponieważ smartfony zostały zachowane w większości kodu C++ korzystającego z NDK i Objective-C++. W 2017 roku, gdy udostępniliśmy Earth w internecie, skompilowaliśmy kod C++ i uruchomiliśmy go w przeglądarce Chrome przy użyciu klienta natywnego (NaCl).
NaCl była wówczas jedyną technologią przeglądarki, która umożliwiała nam przeniesienie kodu C++ do przeglądarki i zapewnienie odpowiedniej wydajności w przypadku Earth. Technologia NaCl była stosowana wyłącznie w Chrome i nigdy nie była stosowana w różnych przeglądarkach. Teraz zaczynamy przechodzić na technologię WebAssembly, która pozwala uruchamiać ten sam kod w różnych przeglądarkach. Oznacza to, że usługa Earth będzie dostępna dla większej liczby użytkowników w sieci.
Wątek na wątkach
WebAssembly nadal ewoluuje jako standard, a przeglądarki są wciąż rozszerzane o kolejne funkcje i funkcje. Z perspektywy Earth najważniejsza różnica w obsłudze standardu WebAssembly między przeglądarkami dotyczy obsługi wątków. Niektóre przeglądarki obsługują wielowątkowość, a inne nie. Pomyśl o Ziemi jak o wielkiej grze 3D rzeczywistego świata. W związku z tym stale przesyłamy dane do przeglądarki, dekompresujemy je i przygotowujemy do renderowania na ekranie. Możliwość wykonywania tych czynności z wątkiem w tle wyraźnie zwiększa wydajność Earth w przeglądarce.
Wielowątkowa funkcja WebAssembly korzysta z funkcji przeglądarki o nazwie SharedTrackBuffer, która została pobrana z przeglądarek po wykryciu luk w zabezpieczeniach Spectre i Meltdown. Aby ograniczyć potencjalne szkody spowodowane atakami, zespół Chrome ds. bezpieczeństwa wprowadził izolację witryn w tej przeglądarce na wszystkie systemy operacyjne na komputery. Izolacja witryn ogranicza każdy proces renderowania do dokumentów z jednej witryny. Po wdrożeniu tej funkcji zabezpieczeń w Chrome ponownie uruchomiliśmy SharedArrayBuffer na komputery, co pozwoliło nam używać wielowątkowości WebAssembly z Earth w Chrome.
Inne przeglądarki pracują nad izolacją witryn lub innymi środkami łagodzącymi, aby ponownie włączyć ustawienie SharedTrackBuffer. Na razie w tych przeglądarkach Earth będzie działać w 1 wątku.
Jak WebAssembly działa w różnych przeglądarkach
Dowiedzieliśmy się sporo o stanie obsługi WebAssembly w przeglądarkach przenoszonych z Earth. Jeśli będziesz tworzyć aplikacje przy użyciu WebAssembly, musisz poznać obecny stan tego, jak WebAssembly współpracuje z różnymi przeglądarkami.
Edge
Edge wkrótce może stać się 2 odrębnymi środowiskami deweloperskimi, w zależności od decyzji firmy Microsoft o przejściu z mechanizmu renderowania EdgeHTML na mechanizm renderowania opartego na Chromium. W tej chwili Google Earth w wersji beta w standardzie WebAssembly nie będzie działać w obecnej publicznej wersji Edge z powodu braku obsługi WebGL2. Ten problem zostanie naprawiony, gdy nowa wersja Edge oparta na Chromium zostanie opublikowana w najbliższej przyszłości. W międzyczasie możesz pobrać wersję Canary Edge i sprawdzić, czy Earth działa dobrze.
Chrome
Chrome dobrze obsługuje standard WebAssembly, w tym wielowątkowość na komputerze, dzięki czemu Earth będzie działać płynniej. Spodziewamy się jednak, że Chrome doda obsługę dynamicznego alokacji pamięci z wielowątkowością w WebAssembly. Do tego czasu nie można uruchomić Google Earth na urządzeniach z ograniczoną ilością pamięci (np. na komputerach 32-bitowych).
Firefox
Firefox oferuje dobrą obsługę standardu WebAssembly, ale wyłączył obsługę wielowątkowości. W związku z tym aplikacja Earth może działać wolniej. Mamy nadzieję, że w kolejnych wersjach Mozilla przywróci obsługę wielowątkowości. Poza tym Firefox obsługuje dynamiczną alokację pamięci.
Opera
Opera bazuje na Chromium tak samo jak Chrome, wraz z nadchodzącymi wersjami Edge. Jednak bieżąca wersja Opera oferuje tylko jednowątkową obsługę WebAssembly. Earth działa w przeglądarce Opera, ale jej działanie jest nieco gorsze. Być może nowsze wersje Opery będą mogły obsługiwać wielowątkowość i bardziej zaawansowaną obsługę WebAssembly.
Safari
Safari ma mocną implementację interfejsu WebAssembly, ale nie obsługuje w pełni WebGL2. Dlatego Earth z WebAssembly nie działa w Safari. W szczególności niektóre z naszych narzędzi do cieniowania wymagają języka GLSL 1.2. Mamy nadzieję, że usługa Earth będzie również dostępna w Safari po wprowadzeniu lepszej obsługi WebGL2.
Planujemy zwiększyć zasięg funkcji WebAssembly
Udostępnianie Google Earth w internecie trwała długa droga. Około 6 lat temu zaczęliśmy od uruchomienia wstępnej wersji demonstracyjnej opartej na asm.js, która była utrzymywana i rozszerzana przez lata. Następnie przekształcono go w kompilację WebAssembly Earth, a WebAssembly stał się standardem przyjętym przez W3C.
Jest jeszcze wiele sposobów na obsługę WebAssembly i Earth. Chcemy przejść do backendu LLVM, korzystając z łańcucha narzędzi Emscripten (łańcucha narzędzi do generowania WebAssembly na podstawie kodu C++). Ta zmiana umożliwi w przyszłości obsługę SIMD oraz dostęp do skuteczniejszych narzędzi do debugowania, takich jak mapy źródłowe kodu w języku źródłowym. Mamy nadzieję, że wkrótce uda nam się wprowadzić format OffscreenCanvas i pełną obsługę dynamicznego alokacji pamięci w WebAssembly. Wiemy jednak, że jesteśmy na dobrej drodze: WebAssembly to długoterminowa przyszłość Earth w internecie.
Poświęć chwilę na wypróbowanie wersji beta. Przekaż nam swoją opinię, przesyłając opinię bezpośrednio w Google Earth.