Google Earth teraz w niemal każdej nowoczesnej przeglądarce dzięki WebAssembly

Adam Golański , 03.07.2019 r.

Przerabianie aplikacji webowych na desktopowe zwykle kończy się wydaniem kolejnego electronowego pożeracza pamięci, który rzadko kiedy wnosi coś ponad to, co można uzyskać w przeglądarce. W drugą stronę wygląda to znacznie lepiej: w praktyce możliwe się staje uruchomienie w przeglądarce nawet bardzo złożonych aplikacji desktopowych, dając w ten sposób możliwość błyskawicznego z nich skorzystania, bez konieczności instalowania czegokolwiek lokalnie. O tym, jak daleko zaszły w tej dziedzinie współczesne technologie przeglądarkowe świadczy najlepiej aplikacja Google Earth, niedawno udostępniona dla wszystkich przeglądarek dzięki standardowi WebAssembly.

Google Earth po raz pierwszy pojawił się w przeglądarce w 2008 roku. Nie miało to jednak zbyt wiele wspólnego ze standardowymi technologiami webowymi. W tamtych czasach uruchomienie tak złożonej aplikacji było możliwe tylko dzięki binarnej wtyczce Google Earth, kompatybilnej z Netscape Plugin API. Wraz z porzuceniem w ostatnich latach obsługi binarnych wtyczek, rozwiązanie to odeszło do lamusa –z końcem 2016 roku Chrome i Firefox nie były już w stanie tego webowego Google Earth uruchomić.

Na pohybel wyznawcom Płaskiej Ziemi

W 2017 roku zadebiutowało Google Earth 9, które przyniosło nową webową wersję aplikacji o nazwie Earth for Web, możliwą jednak do uruchomienia tylko w Google Chrome. Nic dziwnego, napisano ją w C++ i skompilowano pod kątem uruchamiania w google’owej technologii Native Client (NaCl). Już wtedy widać było, że nowa wersja działa daleko płynniej niż stara, bazująca na wtyczce. Jednocześnie wersja ta trafiła w całości na smartfony – przeniesienie kodu w C++ na Androida i iOS-a nie było trudne dzięki Android NDK i Objective-C++.

Los Earth for Web był jednak od początku przesądzony. Wkrótce po wydaniu aplikacji ogłoszono, że Native Client i wykorzystywane przez niego technologie przeglądarkowe zostaną porzucone. Według aktualnych planów, stanie się to już w tym kwartale dla stron internetowych – jedynie aplikacje Chrome będą mogły wciąż korzystać z nierozwijanego od kilku lat Native Clienta.

Teraz widać już, że WebAssembly radzi sobie dobrze nawet z tak złożoną aplikacją jak Google Earth. Thomas Nattestad, menedżer produktów Web Assembly, V8 i Web Capabilities w Google, tak wyjaśnia decyzję o migracji na kolejną technologię:

W miarę rozwoju Webu zapragnęliśmy, aby Google Earth było dostępne na tej platformie, aby mogło dotrzeć do jak największej liczby ludzi i pozwolić im doświadczyć całego świata na wyciągnięcie ręki. Aplikacje webowe oferują lepsze wrażenia dla użytkowników, ponieważ można je łączyć. Są bezpieczne, ponieważ użytkownicy nie są narażeni na ryzyko wystąpienia wirusów, które mogą pojawić się podczas pobierania oprogramowania, a także są łatwe do układania, możemy je osadzać w innych częściach Webu.
Korzystając z WebAssembly, widzimy w tym możliwość nie tylko zwiększenia dostępności aplikacji w różnych przeglądarkach, ale także ulepszenia jakości doświadczenia online.
Google Earth Beta (Chromium)

I faktycznie – wersja na WebAssembly działa wyraźnie płynniej na Chrome, niż poprzednia wersja na Native Clienta. Widać to też na chromopodobnych przeglądarkach (Opera, Vivaldi, Brave czy nowe Edge z kanału Canary). Gorzej wygląda sytuacja z Firefoksem. Nowe Earth for Web oczywiście się uruchomi (właściwie nie działa tylko na Safari i stabilnej wersji Edge, jako że nie obsługują one standardu WebGL2), ale nie działa zbyt szybko.

Firefox: albo szybko, albo bezpiecznie?

Problem tkwi w wielowątkowości. Aplikacja pobiera nieustannie w trakcie pracy duże ilości danych, dekompresuje je, przetwarza, a następnie wyświetla przez trójwymiarowy interfejs na ekranie. Na Chrome (i chromopodobnych przeglądarkach) odbywa się to w tle, w równoległych wątkach, dzięki obiektowi SharedArrayBuffer, wykorzystywanemu do współdzielenia pamięci między wątkami.

Jednak w 2018 roku, po odkryciu podatności Spectre, wszystkie popularne przeglądarki wyłączyły obsługę SharedArrayBuffer. Wykorzystanie tego obiektu mogło prowadzić do wycieku wrażliwych danych. Pół roku później Google wprowadziło do Chrome mechanizm neutralizujący ataki Spectre o nazwie Site Isolation i ponownie włączyło SharedArrayBuffer. Mozilla nie zdołała jednak tego zrobić do tej pory, i dlatego na Firefoksie Earth for Web działa w jednym wątku.

Warto podkreślić, że ta nowa przeglądarkowa wersja Google Earth to wciąż wydanie beta. W przyszłości uzyska kolejne optymalizacje związane z WebAssembly, na czele ze wsparciem dla instrukcji SIMD oraz dynamicznym linkowaniem.

Najnowsze oferty pracy:

Polecane wpisy na blogu IT: