Nowy Firefox uruchomi gry i aplikacje webowe tak szybko, jakby ładował obrazki

Nowy Firefox uruchomi gry i aplikacje webowe tak szybko, jakby ładował obrazki18.01.2018 12:48

Po długich latach zmagań między rozwiązaniami mającymipozwolić na jak najszybsze uruchamianie aplikacji w przeglądarkach,w 2015 roku wyłonił się standard WebAssembly.Definiuje on binarny format plików .wasm i odpowiadający muźródłowy format tekstowy kodu przypominającego assembler. Kodtaki uruchamiany jest na przenośnej maszynie stosowej, z szybkościąbliską szybkości natywnego kodu, w bezpiecznym sandboksie, poprzejściu formalnej weryfikacji. Co najważniejsze, obecniewszystkie najważniejsze przeglądarki są już w stanie uruchamiaćaplikacje dostarczane w postaci plików .wasm, a pod względemmożliwości aplikacje te mogą to samo, co aplikacje w JavaScripcie.Każdy z producentów ma jednak własną implementację standardu, aróżnią się one między innymi wydajnością dekodowania binarnychplików i ich kompilacji. Różnice były jednak niewielkie – ażdo teraz. Mozilla znalazła sposób, by radykalnie przyspieszyć tenproces.

WebAssembly a JavaScript

Silniki JavaScriptu osiągnęły granice możliwej optymalizacji.Pewnych rzeczy nie da się przeskoczyć. Przeglądarka pobierająckod w JavaScripcie pobiera go w formie tekstowej (nawet jeśli skryptzostał zminimalizowany). Potem parser musi przetworzyć go w drzewoskładni abstrakcyjnej, czyli rozpisanie logiki kodu na węzłypołączone według znaczących konstrukcji i składowych. Parseryrobią to zwykle po łebkach, przetwarzając tylko te funkcje, którezostaną zaraz bezpośrednio wywołane, a zamiast reszty wstawiającstuby (czyli puste obiekty). Finalnie takie drzewo składniowezostaje przekształcone na bajtowy kod pośredniczący, któryprzechodzi swoje wstępne procesy optymalizacji, a następnie jesturuchomiany i jednocześnie optymalizowany w trakcie uruchomienia nasilniku skryptowym tej konkretnej przeglądarki.

W wypadku WebAssembly sytuacja wygląda znacznie prościej.Przeglądarka dostaje zwarty kod pośredniczący w binarnej postaci.Musi on zostać jedynie zdekodowany (jest to nawet 20 razy szybsze odparsowania) i sprawdzony pod kątem błędów, potem zostajeskompilowany i uruchomiony. Sam proces kompilacji zależy odprzeglądarki, ale tak czy inaczej jest o wiele wydajniejszy, choćbyze względu na statyczną typizację (jak np. w C/C++) i to, że kodWebAssembly jest efektem pracy kompilatora, a nie człowieka. Wefekcie aplikacja WebAssembly nie tylko ładuje się znaczącoszybciej, ale też działa później w przeglądarce o wielewydajniej.

Oczywiście celem WebAssembly nie jest zastąpienie JavaScriptu,raczej jego uzupełnienie – chodzi o danie programistom lepszejplatformy do uruchamiania złożonych, wymagających aplikacji,pisanych przede wszystkim w C/C++, a nie sterowanie w tym językuinterfejsami użytkownika stron internetowych.

Wyścigi na nowym torze

Wydajność silników JavaScriptu wiodących przeglądarek jestdziś zbliżona. Można powiedzieć że są benchmarki, w którychwygra Chrome, są takie, które pokażą wyższość Firefoksa, znająsię nawet takie, w których najlepsze będzie Edge. W wypadkuWebAssembly, które stało się po prostu częścią tych silnikówskryptowych (wykorzystywane są istniejący backend kompilatora,mechanizmy sandboksa, frontend ładowania modułów itp.) teżróżnice nie było wielkie.

Na łamach blogaMozilli, pani Lin Clark opisuje jednak nowe metody ładowania ikompilowania kodu WebAssembly, które uczynią z Firefoksa58 najszybszą platformę do uruchamiania takich aplikacji. Niemówimy tu o wzrostach rzędu kilku-kilkunastu procent. Jaksprawdziliśmy na kompilacji nightly Firefoksa, mowa okilkunastokrotnym przyspieszeniu. Innymi słowy, Mozilla zmieniłareguły gry. Nagle okazuje się, że kod w pliku .wasm jestprzetwarzany szybciej, niż ładowany przez sieć, innymi słowy,przypomina bardziej bitmapowy obrazek niż kod w JavaScripcie. Do tejpory skrypt, który miał 100 KB, był uważany za duży skrypt, zaśobrazek mający 100 KB był w sumie niedużym obrazkiem. Teraz 100 KBskrypt WebAssembly musimy uznać również za nieduży.

Jak ten nowy kompilator działa? Przede wszystkim rozpoczynakompilację wcześniej, nie czekając na pobranie całego pliku.Kompiluje kod WebAssembly linijka po linijce, jakby było to jakieśstrumieniowane medium (właściwie to jest, za sprawą specjalnegointerfejsu do strumieniowania kodu). A jako że sekcja kodu w plikubinarnym jest przed sekcją danych, kod do wykonania może byćgotowy na długo przed pobraniem pliku. Tak pobierane obiekty .wasmmogą być oczywiście kompilowane równolegle.

Kompilacja WebAssebmbly w Firefoksie 57
Kompilacja WebAssebmbly w Firefoksie 57

Do tego dochodzą nowe techniki optymalizacji. InżynierowieMozilli mówią o warstwowym (tiered) kompilatorze. Gdy kod zaczynanapływać wartkim strumieniem, kompilowany jest przed podstawowykompilator (Tier 1). Gdy kod ten zostaje uruchomiony i już działa,włącza się drugi kompilator, korzystający z zaawansowanychtechnik optymalizacji, w tle ponownie sobie kompiluje cały kod ipodmienia pierwotną wersję na tę bardziej zoptymalizowaną. Wefekcie aplikacja po chwili od uruchomienia przyspiesza.

Kompilacja WebAssembly w Firefoksie Nightly (59)
Kompilacja WebAssembly w Firefoksie Nightly (59)

Taki podział ma sens z perspektywy tego, co dostrzega użytkownik– kompilator Tier 1 jest dziesięciokrotnie szybszy od kompilatoraTier 2, a zarazem generuje dwukrotnie wolniejszy kod. Wartopodkreślić, że oba kompilatory korzystają ze wszystkichdostępnych rdzeni procesora. Efekt można zobaczyć w prostymbenchmarku Mozilli, mierzącym czas kompilacji gryTanks.

Kompilacja WebAssembly w Google Chrome 61
Kompilacja WebAssembly w Google Chrome 61

To nie koniec możliwości optymalizacji: Mozilla zamierza wnastępnym etapie wprowadzić bufor dla już skompilowanego kodu. Poco ciągle kompilować te same pliki .wasm? Po otworzeniu stronyinternetowej z tym samym kodem, od razu dostaniemy w przeglądarceprekompilowany kod maszynowy. To naprawdę świt nowej ery dlazaawansowanych aplikacji webowych.

Użyteczne linki

Źródło fotografii Red fox with an egg – Flickr, autor: Nora Feddal licencja: CC BY-SA 2.0

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.