r   e   k   l   a   m   a
r   e   k   l   a   m   a

Mozilla Servo: równoległe renderowanie stron w mobilnych przeglądarkach coraz bliższe

Strona główna AktualnościOPROGRAMOWANIE

Początki przeglądarek Mozilli nierozłącznie wiążą się z odziedziczonym po Netscape silnikiem renderującym Gecko (znanym wówczas jeszcze pod nazwą NGLayout), który zadebiutował niemal 14 lat temu w przeglądarce Netscape 6. Od pojawienia się Phoeniksa w 2002 roku (który później zmienił nazwę na Firebirda, który później zmienił nazwę na Firefoksa), Gecko rozwijało się z przeglądarką Mozilli, dzięki staraniom jej deweloperów i jej społeczności. Przez ten czas znalazło zastosowania w innych projektach, zarówno Mozilli (jak np. Thunderbird czy Sunbird) jak i niezależnych programistów (np. przeglądarce Lunascape czy odtwarzaczu muzyki Nightingale), a w końcu stało się kluczowym komponentem mobilnego systemu operacyjnego Firefox OS. Jednak potrzeby mobilnych aplikacji niekoniecznie pokrywają się z potrzebami aplikacji pisanych na desktop i to właśnie najprawdopodobniej jest powodem, dla którego Mozilla widzi przyszłość, w której Gecko zostaje porzucone na rzecz zupełnie nowego silnika, najwyraźniej rozwijanego z myślą przede wszystkim o Firefox OS-ie i Firefoksie dla Androida.

W kwietniu zeszłego roku programiści Mozilli i Samsunga połączyli siły w pracy nad Servo – silnikiem renderującym dla przeglądarek, który miałby zapewnić pełne wykorzystanie wielordzeniowej architektury współczesnych procesorów. Wówczas największe zainteresowanie wzbudził nie sam silnik, ale język, w jakim był on pisany. Opracowany przez Mozilla Research język programowania Rust daje deweloperom wydajność porównywalną z C++, ale bez ryzyka związanego z masową produkcją błędów obsługii pamięci, typowych dla aplikacji pisanych w C++. Zapewnia też wbudowane w samą strukturę języka mechanizmy współbieżności, ułatwiające bezpieczną paralelizację kodu dla różnych scenariuszy.

Sam silnik renderujący, którego nazwa nawiązuje do robota Toma Servo z klasycznego serialu komediowego science fiction MST3K, przedstawiono wówczas jako eksperyment badawczy, podkreślając, że nie ma żadnych planów, by integrować go z istniejącymi produktami Mozilli. Jak faktycznie wówczas producent Firefoksa na to patrzył – nie wiadomo, trzeba pamiętać jednak o kontekście wydarzeń: Opera zrezygnowała ze swojego silnika, zaś deweloperzy Chrome ogłosilli, że kończą z oficjalnym WebKitem i przechodzą na nowy silnik Blink – fork WebKitu robiony wyłącznie z myślą o google'owej przeglądarce. Analogiczne deklaracje dla zrośniętego z Gecko Firefoksa byłyby przedwczesne, i mogłyby wywołać jedynie obawy o przyszłość tej przeglądarki.

r   e   k   l   a   m   a

W rzeczywistości Servo wyglądało na coś więcej, niż tylko badawczy projekt. Dla Mozilli, coraz bardziej zaangażowanej w rozwój produktów mobilnych, Gecko zaczynało być kulą u nogi. Problem tkwi w tym, że renderowanie dokumentów HTML jest dziś procesem, który paralelizuje się w bardzo ograniczonym stopniu. Choć niektóre zadania, takie jak dekompresja mediów, czy uruchamianie skryptów można przerzucić na inne rdzenie, to zdecydowana większość pracy wykonywana jest w jednym wątku, na jednym rdzeniu. Gdy przeglądarkę uruchamiamy na maszynie, której sercem jest Core i5 czy i7, to nie boli. Gdy jednak przychodzi do uruchamiania przeglądarki na rdzeniach ARM, sytuacja jest znacznie gorsza. Topowe mikroprocesory na tej architekturze, takie jak Snapdragon 800 czy Tegra 4 osiągają w benchmarkach dla pojedynczych rdzeni kilkukrotnie gorsze wyniki, niż topowe mikroprocesory z rdzeniami x86-64. O wiele zaś dziś łatwiej dodać w układach SoC ARM więcej rdzeni, niż zwiększyć wydajność pojedynczego rdzenia.

Servo elegancko obchodzi ten problem, rozbijając renderowanie dokumentu na wyliczanie layoutu, renderowanie treści i wykonywanie skryptów. Wszystkie te zadania wykonywane są równoległe na oddzielnych rdzeniach, a co więcej, możliwa jest dalsza ich paralelizacja. To zasługa języka Rust, w którym każde zadanie jest izolowane od innych, a komunikacja między nimi zachodzi asynchronicznie. Dzięki temu gdy Servo musi przeskalować rozmiar okienka, wyliczenie layoutu nie musi czekać na wyliczenie istniejącej już treści. Tak samo Servo uniezależnia renderowanie stron od zawartych w nich czasami pływających ramek (iframe) – zamiast wyliczać je w jednym wątku, zostają przeniesione do własnego zadania przerzuconego na oddzielny rdzeń.

Równie interesujące jest równoległe wyliczanie layoutu przez Servo. Zamiast zaczynać od najwyższych elementów strony (html, body, itd...) i schodzić w głąb drzewa rozgałęzień, ustalając wzajemne położenie elementów potomnych, nowy silnik Mozilli wyszukuje najpierw wzajemnie niezależne obszary strony i układa je równoległe, w niezależnych zadaniach, posyłanych tym rdzeniom, które akurat są najmniej obciążone.

W ten sposób Servo nie tylko przyspiesza działanie mobilnej przeglądarki, ale też zmniejsza zużycie energii: jeden rdzeń obciążony w 100% jest o wiele większym obciążeniem dla akumulatora niż cztery rdzenie obciążone w 30-40%. Ludzie z Mozilli i Samsunga są przekonani więc, że dzięki paralelizacji mogą uzyskać znacząco dłuższy czas pracy na baterii.

Jak na razie nowym silnikiem Mozilli bawi się mało kto poza członkami zespołu i grupą testerów. Dostępny jest tylko kod źródłowy na Githubie, możliwy do skompilowania na Linuksie, OS-ie X i dla Androida (pod którego jest najbardziej optymalizowany). Nikt na razie nie potrafi skompilować go na Windows. Brakuje mu też obsługi wielu API modelu DOM, obsługi licznych właściwości CSS – ale deweloperzy projektu są optymistami. Niewielki zespół uważa, że binarne wersje silnika zostaną pokazane już w drugim kwartale, a jeszcze w tym roku Servo będzie nadawało się do użytku (przynajmniej wewnętrznie, w Mozilli). Kiedy nowy silnik trafi do mobilnego Firefoksa oraz Firefox OS-a, jeszcze nie wiadomo, ale niewykluczone, że stanie się to już w 2015 roku. W sytuacji, gdy coraz częściej procesory ARM zawierają cztery i więcej rdzeni, dałoby to Mozilli ogromną przewagę w dziedzinie mobilnych przeglądarek.

Wszystkiego, co można się dowiedzieć o Servo, dowiecie się z wiki projektu, dostępnej tutaj.

© dobreprogramy

Komentarze

r   e   k   l   a   m   a
r   e   k   l   a   m   a
Czy wiesz, że używamy cookies (ciasteczek)? Dowiedz się więcej o celu ich używania i zmianach ustawień.
Korzystając ze strony i asystenta pobierania wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.