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

Asm.js i OdinMonkey: JavaScript w Firefoksie będzie niemal tak szybki jak kod natywny

Strona główna AktualnościOPROGRAMOWANIE

Uruchamianie kodu natywnego w przeglądarce to rozwiązanie dla Mozilli nie do przyjęcia. Programiści Firefoksa nie chcą jednak oddać Chrome monopolu na uruchamianie wymagających aplikacji (w szczególności gier), szukając rozwiązań, które pozwolą na uruchamianie kodu w JavaScripcie z szybkością zbliżoną do kodu natywnego. Nie jest to czymś niemożliwym – dzięki wykorzystaniu skrośnego kompilatora Emscripten udało się w lutym tego roku uruchomić na Firefoksie silnik Unigine, wykorzystywany w wielu benchmarkach i grach. To nie koniec możliwości, jakie tkwią przed JavaScriptem w przeglądarce – Firefox 22, którego premiera planowana jest na czerwiec, będzie zawierał w swoim silniku skryptowym moduł optymalizacyjny OdinMonkey, pozwalający na uruchamianie kodu zbudowanego za pomocą Asm.js.

Asm.js, z tego co można wyczytać w dokumentacji projektu, jest niskopoziomowym podzbiorem JavaScriptu, w pełni kompatybilnym ze standardowym kodem JS. Z Asm.js usunięto przede wszystkim te elementy języka, które spowalniają JavaScript, takie jak boxing liczb zmiennoprzecinkowych, zbieranie nieużytków czy elastyczny układ pamięci. W zamian programiści otrzymują coś na kształt maszyny wirtualnej z C/C++, zawierającej dużą binarną stertę, arytmetykę stało- i zmiennoprzecinkową, wskaźniki i definicje funkcji. Kod ma ograniczony dostęp do biblioteki standardowej JS (przede wszystkim funkcji matematycznych) i jest statycznie typowany. Chcący pisać pod Asm.js programista na początku pliku czy funkcji umieszcza dyrektywę use asm, co wymusza na kompatybilnym silniku skryptowym włączenie optymalizacji typu ahead-of-time (wykorzystywanej między innymi w Javie i .NET)

Oczywiście nikt raczej takiego kodu ręcznie pisał nie będzie (może za wyjątkiem jakichś koderów z demosceny). Ten podzbiór JavaScriptu ma być raczej celem kompilacji z C/C++ dla skrośnych kompilatorów, takich jak wspomniany Emscripten (którego autor Alon Zakai jest notabene jednym z deweloperów zaangażowanych w prace nad tym podzbiorem JavaScriptu). Asm.js zawiera też własny kompilator, wykorzystywany do walidacji i optymalizacji kodu, sprawdzający czy jest on wolny od obiektowych elementów JS, dobrze typowany i czy nie zawiera nie należących do podzbioru języka konstrukcji.

Jeśli warunki te nie zostaną spełnione, kod zostaje wykonany jako zwykły JavaScript. Sama specyfikacja Asm.js opisuje jak kod JS ma wyglądać, by być zgodnym z Asm.js, cała semantyka jest zaś zgodna ze standardem ECMAScriptu. Uzyskany kod może więc być uruchamiany także w starszych przeglądarkach, choć nie skorzystają one z optymalizacji zapewnianych przez ulepszone silniki skryptowe.

Zdaniem ludzi Mozilli wiele jest zalet takiego podejścia, szczególnie w porównaniu do google'owych prac nad Native Clientem. Łatwo zaimplementować obsługę Asm.js w istniejących już silnikach skryptowych, kod taki łatwo łączyć z normalnym JavaScriptem, jest on też wstecznie kompatybilny. Pierwsze testy wydajności, wykorzystujące m.in. benchmark zlib, robią wrażenie:

  • kod JS uruchomiony na silniku V8 (Google Chrome) był 5,95 razy wolniejszy od kodu natywnego,

  • kod uruchomiony na silniku SpiderMonkey (Firefox) był 5,15 razy wolniejszy od kodu natywnego,

  • kod uruchomiony z wykorzystaniem nowego modułu OdinMonkey w Firefoksie 22 był jedynie 1,61 raza wolniejszy od kodu natywnego.

Pierwsze kompilacje Firefoksa z OdinMonkeyem są już dostępne w kanale Nightly, dla Windows i Linuksa na architekturę x86/x86-64. Niebawem pojawić się mają wersje dla OS-a X i ARM-a. Wygląda na to, że Mozilla trafiła w samo sedno: z Asm.js programiści mogą tworzyć wymagające obliczeniowo aplikacje webowe w JavaScripcie, korzystając z niskopoziomowego kodu wszędzie tam, gdzie niezbędna jest wydajność, i wysokopoziomowego, gdzie ważniejsza jest wygoda programowania.

Zainteresowanym Asm.js polecamy zapoznanie się z prezentacją Alona Zakai, dostępną pod adresem lanyrd.com/2013/mlocjs/sccwrb/.

r   e   k   l   a   m   a
© dobreprogramy
r   e   k   l   a   m   a
r   e   k   l   a   m   a

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.