Jak wprowadzamy Google Earth w internecie

Ulepszenie dostępu do Google Earth w różnych przeglądarkach za pomocą WebAssembly.

Jordon Mears
Jordon Mears

W idealnym świecie każda aplikacja tworzona przez programistów, niezależnie od technologii, byłaby dostępna w przeglądarce. Przeniesienie projektów do sieci może jednak napotkać na przeszkody, zależne od technologii, w której zostały one utworzone, oraz od tego, jak dobrze ta technologia jest obsługiwana przez różnych dostawców przeglądarek. WebAssembly (Wasm) to docelowa platforma kompilacji znormalizowana przez W3C, która pomaga nam rozwiązać ten problem, umożliwiając uruchamianie w internecie baz kodu źródłowego w językach innych niż JavaScript.

Właśnie to zrobiliśmy w przypadku Google Earth, która jest teraz dostępna w wersji beta w standardzie WebAssembly. Pamiętaj, że nadal jest to wersja beta Google Earth i może nie działać tak płynnie jak wersje, z których zazwyczaj korzystasz (spróbuj zwykłej aplikacji Earth na potrzeby przeglądarki). Możesz poeksperymentować z wersją beta w przeglądarkach Chrome i innych przeglądarkach opartych na Chromium, w tym Edge (w wersji Canary), Opera i Firefox. Jeśli szukasz lepszej obsługi w różnych przeglądarkach dla aplikacji na konkretne platformy, skorzystaj z wersji beta.

Dlaczego wybraliśmy WebAssembly do Google Earth

Początkowo większość kodu Google Earth napisaliśmy w języku C++, ponieważ była to aplikacja na komputery przeznaczona do zainstalowania. Następnie, gdy smartfony zaczęły się rozpowszechniać, udało nam się przenieść aplikację na Androida i iOS, zachowując większość kodu C++ za pomocą NDKObjective-C++. W 2017 r., gdy udostępniliśmy Earth w internecie, użyliśmy klienta natywnego (NaCl), aby skompilować kod C++ i uruchomić go w przeglądarce Chrome.

W tamtym czasie NaCl była jedyną technologią przeglądarki, która pozwoliła nam przenieść nasz kod C++ do przeglądarki i osiągnąć wydajność wymaganą przez Earth. Niestety technologia NaCl była dostępna tylko w Chrome i nigdy nie została zaakceptowana przez inne przeglądarki. Teraz zaczynamy przechodzić na WebAssembly, co pozwala nam wykorzystywać ten sam kod w różnych przeglądarkach. Oznacza to, że aplikacja Earth będzie dostępna dla większej liczby osób w internecie.

Zrzut ekranu z Earth przedstawiający wieżę Eiffla

Wątek o przetwarzaniu równoległym

WebAssembly jest wciąż rozwijanym standardem, a przeglądarki są stale rozszerzane o nowe funkcje. Z punktu widzenia Earth największą różnicą w obsłudze WebAssembly między przeglądarkami jest obsługa wątków. Niektóre przeglądarki obsługują wielowątkowość, a inne nie. Wyobraź sobie, że Ziemia to ogromna gra wideo 3D, która przedstawia rzeczywisty świat. W związku z tym stale przesyłamy dane do przeglądarki, dekompresujemy je i przygotowujemy do wyświetlenia na ekranie. Wykonywanie tych zadań w wątku tła wyraźnie poprawiło wydajność Earth w przeglądarce.

Wielowątkowy WebAssembly korzysta z funkcji przeglądarki o nazwie SharedArrayBuffer, która została wycofana z przeglądarek po ujawnieniu podatności na zagrożenia Spectre i Meltdown. Aby ograniczyć potencjalne szkody spowodowane atakami, zespół ds. bezpieczeństwa w Chrome wprowadził izolację witryn w Chrome na wszystkich systemach operacyjnych na komputery. Izolacja witryn ogranicza każdy proces renderowania do dokumentów z jednej witryny. Dzięki tej funkcji zabezpieczającej Chrome ponownie włączył SharedArrayBuffer na komputerach. Umożliwiło to korzystanie z wielowątkowego WebAssembly w Earth for Chrome.

Inne przeglądarki pracują nad izolacją witryn lub innymi rozwiązaniami, aby ponownie włączyć obiekt SharedArrayBuffer. Tymczasem w tych przeglądarkach Earth działa w trybie jednowątkowym.

Jak WebAssembly działa w różnych przeglądarkach

Wiemy już sporo o tym, jak WebAssembly jest obsługiwany w przeglądarkach, które obsługują Earth. Jeśli zamierzasz tworzyć aplikacje za pomocą WebAssembly, musisz wiedzieć, jak ta technologia działa w różnych przeglądarkach.

Edge

Edge jest na etapie wprowadzania dwóch różnych środowisk programistycznych, ponieważ Microsoft zdecydował się przejść z renderowania EdgeHTML na renderowanie oparte na Chromium. Obecnie wersja beta Google Earth na WebAssembly nie działa w bieżącej wersji publicznej przeglądarki Edge z powodu braku obsługi WebGL2. Ten problem zostanie rozwiązany, gdy w najbliższej przyszłości udostępnimy nową wersję Edge opartą na Chromium. Tymczasem możesz pobrać wersję Canary przeglądarki Edge i sprawdzić, czy Earth działa prawidłowo.

Chrome

Chrome obsługuje WebAssembly, w tym wielowątkowość na komputerach, dzięki czemu aplikacja Earth działa płynniej. Czekamy jednak na dodanie przez Chrome obsługi dynamicznego przydzielania pamięci z wielowątkowością w WebAssembly. Do tego czasu Earth może nie uruchamiać się na urządzeniach z ograniczoną ilością pamięci (np. na komputerach 32-bitowych).

Firefox

Firefox dobrze obsługuje WebAssembly, ale ma wyłączoną obsługę wielowątkowości. W efekcie może się ono zwolnić. Mamy nadzieję, że Mozilla przywróci obsługę wielowątkowości w przyszłych wersjach. Z drugiej strony Firefox obsługuje dynamiczne przydzielanie pamięci.

Opera

Opera, podobnie jak Chrome i przyszłe wersje Edge, jest oparta na Chromium. Jednak obecna wersja Opery obsługuje WebAssembly tylko w trybie jednowątkowym. Earth działa w przeglądarce Opera, ale w niektórych przypadkach może to być mniej wygodne. Mamy nadzieję, że nowsze wersje Opery będą obsługiwać wielowątkowość i bardziej stabilne WebAssembly.

Safari

Safari obsługuje WebAssembly, ale nie obsługuje w pełni WebGL2. Dlatego Earth z WebAssembly nie działa w Safari. W szczególności niektóre shadery wymagają wersji GLSL 1.2. Mamy nadzieję, że Earth będzie dostępna również w Safari, gdy tylko dodamy lepszą obsługę WebGL 2.

Z niecierpliwością czekamy na szersze wykorzystanie funkcji WebAssembly

Dostępność Earth w internecie to długa droga. Około 6 lat temu zaczęliśmy od wewnętrznego dema opartego na asm.js, które było przez lata aktualizowane i rozbudowywane. Następnie została ona przekonwertowana na wersję Earth w WebAssembly, ponieważ WebAssembly stał się standardem przyjętym przez W3C.

W przypadku WebAssembly i Earth wciąż mamy jeszcze sporo do zrobienia. Chcielibyśmy przejść na backend LLVM za pomocą Emscripten (toolchain do generowania WebAssembly z kodu C++). Ta zmiana umożliwi przyszłą obsługę SIMD oraz bardziej zaawansowane narzędzia debugowania, takie jak mapy źródeł dla kodu w języku źródłowym. Mamy też nadzieję, że zyskamy wsparcie dla OffscreenCanvas i pełne wsparcie dla dynamicznego przydzielania pamięci w WebAssembly. Wiemy jednak, że podążamy w dobrą stronę: WebAssembly to przyszłość aplikacji internetowej Earth.

Poświęć chwilę na wypróbowanie naszej beta. Daj nam znać, jak Ci się podoba, zostawiając opinię bezpośrednio w Earth.