Root.czBlogyMartin Hassman: nejen o prohlížečích

JavaScript ve Firefoxu 3.1 trhne všechny rekordy

Martin Hassman, 23. 08. 2008, 17:36 v kategorii Webové prohlížeče, štítky: ,

Jestli se za poslední roky něco v prohlížečích zlepšilo nade všechna očekávání, tak je to rychlost JavaScriptu. A tím myslím ve všech prohlížečích. I když ačkoliv se jak Opera tak Internet Explorer (ve svém osmičkové verzi) rovněž dost snaží, k největšímu souboji dochází zdá se mezi WebKitem (Safari) a Geckem (Firefoxem). Na jaře jsem se ptal, jak dlouho tenhle trend prohlížečů vydrží.

Vydržel. Ačkoliv trojková verze Firefoxu i trojjedničková verze Safari přinesla zrychlení, boj neskončil.

WebKit podává

Vývojáři Webkitu začátkem léta zabodovali, když oznámili svůj nový JavaScriptový interpret SquirrelFish, který díky řadě optimalizací procházení syntaktického stromu (lépe a přesněji vysvětlují vývojáři) dosáhnul dalšího zrychlení (v průměru 1,6x viz graf).

Graf rychlost JavaScriptu ve Webkitu

Počet proběhlých testů SunSpider za minutu (vyšší číslo = lepší)

Gecko smečuje

Během léta bylo zdánlivě ticho po pěšině. Ovšem tento týden zabodoval pro změnu druhý tým. Do vývojových verzí Firefoxu 3.1 byl zahrnut projekt TraceMonkey. Ten do JavaScriptového enginu SpiderMonkey přidává JIT (just-in-time) code compilation (lepší vysvětlení a ještě lepší vysvětlení), se kterou je JavaScript v Gecku oproti předchozím verzím 1.8x až 22x rychlejší (podle druhu testu) a daří se mu předehnat i SquirellFish. Projekt není dosud dokončen, ve výsledku bude zrychlení ještě větší.

Graf rychlost JavaScriptu ve Firefoxu

John Resig dokonce srovnává rychlost JavaScriptu s céčkem: "With this improvement it's leap-frogged any sort of traditional and has gone head-to-head with computationally-powerful languages like C." To je skutečně odvážné tvrzení (zdá se, že porovnávali s neoptimalizovaným výstupem gcc), počkám si zvědavě na dokončení projektu, zda bude výsledek opravdu srovnatelný.

V práci na Tracemonkey pomohl i kód od Adobe a výsledek se zpětně nejspíš dostane i do dalších verzí Flashe (takže i jeho ActionScript bude rychlejší). Práce na Tracemonkey začala před asi 60 dny (tj. pár týdnů po té, co WebKit  oznámil SquirellFish), nicméně JIT bylo avizováno již asi před dvěma lety jako součást Mozilla 2.

Zajímalo by mne, zda už teď pro změnu vývojáři WebKitu přemýšlí, zda a jak tenhle náskok vyrovnají. Nic bych na to nedal, když by nám ještě před koncem roku připravili nějaké další překvapení. Držím jim palce. Zrychlení JavaScriptu v prohlížečích umožní, aby některé dnes pomalé hříčky byly časem vhodné i do produkčního prostředí. A také idea Mozilla 2, ve které mnohem větší část kódu prohlížeče bude napsána přímo v JavaScriptu, se stává reálnější.

A já se opět ptám. Kde se to zastaví, kde se to zastaví?

Další čtení

Komentáře (6)

  1. 24. 08. 2008, 11:09 David Majda napsal:

    Nejlepší na tom všem je, že všechny tyhle optimalizace JavaScriptu v prohlížečích posouvají state-of-art v interpretaci dynamických skriptovacích jazyků obecně. Například tacing trees, použité ve Firefoxu, jsou (pokd vím) úplně nová technika, kterou půjde použít i pro další jazyky jako Python nebo Ruby. Zdá se, že teprve prohlížeče a složité webové aplikace byly dostatečnou motivací pro další výzkum v téhle oblasti.

    Hezké na tom je taky to, že to celé vzniká ve spolupráci s univerzitou - ukázkový příklad spolupráce kooperace komerční a akademické sféry.

    "Kde se to zastaví, kde se to zastaví?" - no přece až bude JS rychlý jako céčko :-)

  2. 24. 08. 2008, 20:44 ivan napsal:

    Hmm, skoda jen, ze ackoliv je spidermonkey vicevlaknovej interpret JS, tak je do mozilly naroubovan jak single-threaded. Tzn. jedno vlakno s jednou frontou javascriptovych volani, ktere je treba obslouzit. Krome security kontextu se nikde nerozlisuje, jestli je vykonavany JS kod soucasti XULu, nebo jestli jde o kod z nejake HTML stranky. A tak se klidne muze stat, ze se cela mozilla zastavi(zasekne), protoze jedna zalozka obsahuje JS kod, ktery sam o sobe neni optimalni. Podle me mozilla ani nerozlisuje ktery JS kod smi naalokovat kolik pameti.

  3. 30. 08. 2008, 20:33 Inkvizitor napsal:

    To je dobrá zpráva a to i pro ostatní dynamické jazyky, jak poznamenává David Majda. Bohužel ale s nástupem vícejádrových procesorů začne být čím dál důležitější podpora konkurenčního zpracování. Problém Firefoxu popsal Ivan, já bych chtěl dodat, že například pro CPython (a u standardní implementace Ruby je to, myslím podobné) začíná být velmi omezující tzv. global interpreter lock, který omezuje škálovatelnost výpočtu ve více vláknech. A to se týká i jiných jazyků s garbage collectorem, jako je například OCaml. Doufejme, že i tohle časem vývojáři vyřeší.

  4. 30. 08. 2008, 20:44 Martin Hassman napsal:

    Inkvizitor: I těm více jádrům u JavaScriptu trochu svítá, jakmile se začne používat http://html456.blogspot.com/2008/08/na-web-prijde-javascript-s-vice-vlakny.html

  5. 31. 08. 2008, 03:58 deda.jabko napsal:

    inkvizitor: garbage collector, kdyz ma podporu pro paralelni prostredi, coz dneska uz neni zadna veda, je v tomto ohledu naprosto podruzna vec. vetsi tezkosti delaji operace se side-effecty (konkurencni pristup k pameti, I/O) a s tema se vyporadat to uz neni takova sranda...

  1. 1 Trackback(s)

  2. Zář 17, 2008: » Firefox 3.1 zřejmě opravdu až příští rok » Blog počítačového nadšence | Píše Jiří Macich ml.

K tomuto spotu není povoleno přidávání komentářů.