Přejít k navigační liště

Zdroják » JavaScript » Velký test rychlosti JavaScriptu v prohlížečích

Velký test rychlosti JavaScriptu v prohlížečích

Dnešním článkem uzavíráme náš seriál o implementacích JavaScriptu – otestováním jejich výkonu ve třech nejčastěji používaných sadách testů: SunSpider, Dromaeo a V8 Benchmark Suite. Prozkoumáme přitom jak stabilní, tak vývojové verze všech důležitých prohlížečů. Chcete vědět, kdo je vítěz?

Jak jsme si již v seriálu několikrát říkali, v poslední době vývoj implementací JavaScriptu v prohlížečích značně zintenzivnil a vývojáři se začali předhánět ve zvyšování jejich výkonu. Spolu s tím vyvstala nutnost měřit, jak na tom jednotlivé implementace po stránce rychlosti vlastně jsou. Vývojáři potřebovali vědět, jak hodně svůj interpret svými úpravami vylepšili, a také srovnávat s konkurencí.

Historie

Různé rychlostní testy pro JavaScript existovaly už dříve, ale autorům implementací JavaScriptu v prohlížečích z různých důvodů úplně nevyhovovaly, a proto se rozhodli vytvořit testy vlastní. Vznikly tak postupně sady testů SunSpider (Apple), Dromaeo (Mozilla) a V8 Benchmark Suite (Google). Jejich výhodou je, že jsou vytvořeny lidmi, kteří prohlížečům a JavaScriptu dobře rozumí. Na druhou stranu lze testy těžko považovat za nezávislé – vždy bude existovat stín podezření, že ten či onen výrobce sadu testů připravil svému prohlížeči tak trochu na míru.

V první části dnešního článku si jmenované tři sady testů představíme. Ve druhé části se pak podíváme, jak si v nich vedou aktuální stabilní a vývojové verze všech důležitých prohlížečů.

Představení testů

SunSpider

První sadou testů, o které budeme mluvit, je SunSpider. Pochází od vývojářů WebKitu, kteří ji představili v prosinci 2007. Obsahuje celkem 26 testů, které se zaměřují na testování rychlosti konstrukcí JavaScriptu a jeho runtime knihovny. Vůbec se netestuje rychlost zacházení s DOM, která reálně výkon aplikací postavených na JavaScriptu také významně ovlivňuje.

Autoři se snažili testovat celý jazyk rovnoměrně a na reálných úlohách. V testu tak najdeme například generování HTML z JSON, raytracing (používaný dnes například při 3D zobrazování pomocí značky <canvas>), dekompresi kódu apod. Autoři se pokoušeli vyhnout umělým „microbenchmarkům“, které nemusí vypovídat o reálném výkonu interpretu.

Test SunSpider

Sadu testů je možné spustit jak v prohlížeči, tak pomocí příkazové řádky. Jednotlivé testy jsou spuštěny několikrát a je počítána doba jejich běhu. Výsledky jsou zprůměrovány a posčítány, následně je pomocí statistické analýzy ověřeno, do jaké míry jsou věrohodné (klíčová slova pro odborníky: T-rozdělení, 95% intervaly spolehlivosti). Při spuštění z prohlížeče je možné výsledky uložit pomocí zakódování do URL a porovnat s jinými, dříve uloženými výsledky.

Dromaeo

Sada testů Dromaeo se snaží odstranit slabiny SunSpideru, který je zaměřen čistě na JavaScript a neměří rychlost práce s DOM. Jejím autorem je John Resig (známý především jako tvůrce knihovny jQuery).

Testy uvnitř Dromaea jsou poměrně pestré – kromě testů samotného JavaScriptu sada obsahuje testy práce s DOM, rychlosti knihoven Prototype a jQuery a práce s CSS selektory. Součástí Dromaea jsou i testy převzaté ze SunSpideru a V8 Benchmark Suite. U každého je stručně popsáno, co testuje a jaký je jeho původ.

Webové rozhraní Dromaea umožňuje spustit celou sadu testů nebo její část. Testy běží pevně daný čas a měří se počet jejich průběhů. Výsledky se automaticky odešlou na server, podobně jako u SunSpideru jsou statisticky zkontrolovány a je možné srovnání s výsledky získanými dříve. Kromě spuštění z prohlížeče Dromaeo umožňuje i spuštění z příkazové řádky.

Test Dromaeo

Na Dromaeo se po jeho uveřejnění sneslo poměrně dost kritiky, především od vývojáře WebKitu Macieje Stachowiaka. Nejdůležitější výtky se týkaly statistických nepřesností při práci s výsledky. Počet spuštění jednotlivých testů se navíc měnil podle rozptylu naměřených výsledků, což není správné (dodatečná měření jsou z pohledu statistiky závislá na měřeních předcházejících). John Resig většinu bodů kritiky uznal a problémy postupně v Dromaeu řeší.

V8 Benchmark Suite

Sadu testů V8 Benchmark Suite uveřejnil Google spolu se svým prohlížečem Chrome a jeho javascriptovým enginem V8. Oproti SunSpideru a Dromaeu je sada velmi jednoduchá a obsahuje pouze pět testů. Ty testují především numerické výpočty, práci s řetězci a volání funkcí s důrazem na volání rekurzivní.

V8 Benchmark Suite

Testy se spustí automaticky při načtení stránky benchmarku a každý běží pevně určený čas. Počet běhů testů pak určuje jejich skóre, z nichž je pomocí geometrického průměru spočítáno skóre celé sady. S naměřenými hodnotami se nijak statisticky nepracuje, není tedy počítána jejich věrohodnost.

Test prohlížečů

Pojďme se nyní podívat na to, jak si v jednotlivých sadách testů vedou současné prohlížeče.

Testované prohlížeče

Otestoval jsem všech pět dnešních důležitých prohlížečů – Internet Explorer, Firefox, Safari, Chrome a Operu – každý z nich v aktuální stabilní a vývojové verzi. Celkem bylo tedy testováno následujících 10 verzí prohlížečů:

  • Internet Explorer 7
  • Internet Explorer 8 RC1
  • Firefox 3.0.5
  • Firefox 3.2 – vývojová verze
  • Safari 3.2.1
  • Safari 3.2.1 + vývojová verze WebKitu (budoucí Safari 4.0)
  • Chrome 1.0
  • Chromium 2.0 – vývojová verze
  • Opera 9.63
  • Opera 10.00 – vývojová verze

Přesnou identifikaci použitých buildů najdete v tabulce s výsledky testů (PDF).

Testovací platforma

Testy byly spouštěny na virtuálním stroji s 512 MB RAM a operačním systémem Windows XP Professional SP3. Ten běžel ve VMware Serveru 2.0 na fyzickém stroji – notebooku IBM ThinkPad R52 s procesorem Intel Pentium M 1.8 GHz, 1 GB RAM a operačním systémem Linux (Ubuntu 8.04).

Platformu Windows jsem ke spouštění testů zvolil ze dvou důvodů: Je na ní k dispozici nejvíce prohlížečů a také ji používá nejvíc uživatelů. Nevýhodou je, že interprety SpiderMonkey (Firefox) a SquirrelFish (Safari) se zde nemohly předvést v plné síle, protože u nich při kompilaci pod Windows nejsou zapnuty některé optimalizace, které nepodporuje kompilátor C++ od Microsoftu (detaily viz příslušné díly seriálu). Tato nevýhoda je ale minimálně u vývojových verzí dost možná přebita kompilací JavaScriptu do nativního kódu, při které se ony optimalizace nevyužívají. Další nevýhodou Windows jsou nepřesnosti výsledků způsobené nízkým rozlišením jejich časovače, který používají všechny prohlížeče kromě Firefoxu a Chrome.

Virtuální stroj jsem použil z jednoduchého důvodu – v době testování jsem neměl k dispozici fyzický stroj s Windows, na kterém by bylo možné „rozházet“ systém instalací mnoha verzí různých prohlížečů.

Metodika

Před začátkem testování byl fyzický stroj restartován a kromě virtuálního stroje na něm neběžela žádná aplikace. Ve virtuálním stroji běžel vždy jen testovaný prohlížeč a poznámkový blok pro záznam výsledků, kromě toho byl stroj před testováním každého prohlížeče res­tartován.

V rámci testu prohlížeče byla 3× spuštěna sada testů SunSpider, 3× V8 Benchmark Suite a následně 1× Dromaeo (zde byla navolena sada doporučených testů) – vždy v tomto pořadí. Vícenásobné spuštění mělo za cíl vyrovnat odchylky způsobené nedeterministickým chováním fyzického i virtuálního stroje a ve výsledcích je započítán průměr ze všech tří běhů. Sada testů Dromaeo byla spuštěna vždy jen jednou, protože její běh trvá poměrně dlouho (cca 16 minut).

Výsledky

Výsledky testů shrnují tři grafy – jeden pro každý test. Zájemci o přesná čísla si můžou stáhnout tabulku s výsledky (PDF).

SunSpider

Výsledky sady testů SunSpider. Menší číslo znamená lepší výsledek.

Dromaeo

Výsledky sady testů Dromaeo. Větší číslo znamená lepší výsledek.

Poznámka: Můžete si povšimnout tří vynechaných hodnot – u IE7, IE8-RC1 a FF3.2-dev. Ve všech těchto prohlížečích test nedoběhl. Firefox vyčerpal celou virtuální paměť, IE 7 pro změnu vyčerpal autorovu trpělivost (za několik desítek minut proběhlo jen necelých 5 testů). Test IE 8 RC1 skončil chybou.

V8 Benchmark Suite

Výsledky sady testů V8 Benchmark Suite. Větší číslo znamená lepší výsledek.

Interpretace výsledků

Vítězem ve všech testech se stala vývojová verze engine V8 (používaného v Google Chrome). Ve V8 Benchmark Suite a Dromaeu mu ale šlape na paty SquirrelFish (Safari) a v SunSpideru také SpiderMonkey (Firefox).

Za touto „silnou trojkou“ se drží interpret Opery. V SunSpideru je jeho vývojová verze zhruba 3× pomalejší než interprety ze silné trojky, ve V8 Benchmark Suite je na úrovni aktuálních stabilních verzí SpiderMonkey a SquirrelFish.

Internet Explorer je (jako ostatně prakticky vždy a ve všem) pozadu. Nejmarkantněji je to vidět u testu SunSpider, kde je IE 7 30× pomalejší než stabilní verze V8!

Vývoj rychlosti interpretů

Zajímavé je také sledovat vývoj rychlosti jednotlivých implementací. U SpiderMonkey, SquirrelFish i V8 jsou znát velké pokroky. Vývojové verze prvních dvou jsou prakticky ve všech sadách testů podstatně rychlejší, než verze stabilní. U V8 je zrychlení také zřetelné, ale je mírnější. Pravděpodobně je to dáno tím, že tento engine byl už od začátku navržen s ohledem na rychlost a není v něm tedy tolik příležitostí k dalším velkým optimalizacím. Navíc i ve stabilní verzi používá kompilaci do nativního kódu, což SpiderMonkey ani SquirrelFish nedělají.

Vývoj enginu Opery by se dal charakterizovat jako „mírný pokrok v mezích zákona“. Jediná sada testů, kde došlo k opravdu významnému zrychlení oproti stabilní verzi, je Dromaeo. Příčinou relativní stagnace je pravděpodobně to, že se vývojáři v rámci verze 10 soustředí na jiné součásti prohlížeče – především renderovací jádro. Právě jeho zrychlení a tedy i zrychlení práce s DOM může mít za následek zlepšení výsledků v Dromaeu.

Zajímavé je přibližně desetinásobné zrychlení mezi IE 7 a IE 8 RC1, které je vidět v SunSpideru. Ještě zajímavější je, že se prakticky nijak neprojevuje ve V8 Benchmark Suite. Vývojáři nejspíš opravili jen několik konkrétních míst v interpretu a jeho knihovnách, které v SunSpideru způsobovaly neúměrně velké zdržení, ale interpret IE jako celek od verze 7 pravděpodobně výrazně neoptimalizovali.

Hodnocení sad testů

Kromě dosažených výsledků si zaslouží komentář i samotné testy. Z pohledu člověka, který den a půl seděl a jen spouštěl jednotlivé sady v prohlížečích, se jako nejpropracovanější jeví sada SunSpider. Má rozumnou dobu běhu (několik minut), všechny prohlížeče ji bez problémů zvládly spustit, výsledky jsou podrobné a statisticky podložené.

Sada Dromaeo je poměrně komplexní a bohužel se to projevuje – tři z deseti prohlížečů ji z různých důvodů nezvládly projít (byť u vývojové verze Firefoxu se nejspíš jedná o dočasný problém). Na druhu stranu je tato sada nejméně umělá a pravděpodobně nejlépe simuluje reálné používání JavaScriptu na webových stránkách. Velkým pozitivem je uložení výsledků testů na server a možnost porovnání s výsledky zaznamenanými dří­ve.

Oproti SunSpideru a Dromaeu dělá V8 Benchmark Suite na první pohled horší dojem. Výsledky prohlížečů jsou velmi rozkolísané, což indikuje velmi úzké zaměření. Spolu s velmi vysokým skóre V8 to svádí k domněnce, že Google sadu vytvořil na míru svému interpretu. Zobrazené výsledky testu nejsou navíc podloženy údaji o jejich spolehlivosti.

Zarážejícím výsledkem ve V8 Benchmark Suite bylo zpomalení vývojové verze SpiderMonkey oproti verzi stabilní při testování v této sadě. Brendan Eich to v komentářích ke svému příspěvku vysvětluje častým rekurzivním voláním funkcí, která SpiderMonkey obtížně kompiluje do nativního kódu.

Závěr

Testem rychlosti implementací JavaScriptu náš seriál o nich končí. Děkuji za všechny podnětné komentáře a věřím, že byl seriál pro vás stejně obohacující jako pro mne.

Čeká nás další velké zrychlení JavaScriptu v prohlížečích?

Komentáře

Subscribe
Upozornit na
guest
27 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Firefox

Tím Firefoxem 3.2 dev je spíš myšlen Firefox 3.1 dev, ne?

Martin Hassman

Ne, tohle skutečně nová vývojová řada.

Anonymní

ze autor jquery pripravuje nejaky testy, pritom jquery je az tragicky pomaly, nebo lepe receno nefunkcni v ie6, narozdil od konkurence

rcs-34

Ironie? Podle mě je zcela normální, že potřeba testovat rychlost vyvstane hlavně tam, kde se jí nedostává. Málokdo sleduje tachometr, kdyz se veze v Porsche, zatímco mladí vlci, dusící svoji JAWA 20 z tachometru nespustí oči :-) Podobně možná uživatelé vyspělých prohlížečů proti uživatelům IE.

karf

jQuery normálně IE6 podporuje a s rychlostí je na tom minimálně srovnatelně s konkurenčními knihovnami.

Jinak autorovi článku díky za celý seriál, opravdu velmi kvalitně zpracované.

x0nix

Mohl byste svá tvrzení nečím doložit? Dle mých zkušeností jQuery funguje v IE6 docela dobře. A např. v SlickSpeed testu [ http://mootools.net/slickspeed/ ] si jQuery vede docela slušně.

Anonymní

JQuery pouzivame denne pro hodne solidne navstevovane weby a zadny rpoblem u IE6 neni. Pokud neco resi jinak pro IE6, je to hlavne problem tohohle archaickeho smejdu – IE6 (leaking forms element, kde to musite prekryt iframem apodobne).

Shabbi.

Od IE7 jsem žádný výkon nečekal, ale ten dlouhatánský sloupec hned v prvním grafu mě vyloženě zarazil. Všichni (rozumní) teď bojujeme za skončení podpory IE6, ale jak chcete dělat dynamické (grafika, efekty, prostě JS) weby, když je IE7 takhle mizerný?

Asi jenom doufat že IE8 přinese zásadní zlepšení, ten už by mohl mít JS jádro přepsané, ne?

Martin Hassman

Výsledky v grafu pro IE8 release candidate se budou velmi pravděpodobně shodovat s finální verzí IE8. Nepředpokládám, že by se za poslední měsíce, které do vydání ostré verze zbývají, řešilo něco jiného než dolaďování a oprava vážných chyb (nějaký přepis javascriptovacího engine může nastat nejdřív u IE9).

Každopádně ty výsledky pro IE8 jsou sice až za ostatními prohlížeči, každopádně zlepšení to je pěkné.

Ped

uzivatele IE7 pokud jeste nepouzivaji neco lepsiho jsou patrne takovy pomalejsi … takze klidne jim i web muze jit tak trochu pomaleji. Vubec bych si s tim nelamal hlavu.

v6ak

Paradoxně, u nějakého testu jsem viděl případ, kdy v testu od daného výrobce dopadl jeho prohlížeč hůř. Možná výrobci dělají skutečné test svému prohlížeči na míru – má ukazovat jeho nedostatky a vést vývojáře.

alblaho

Virtualizovaná prostředí mají dost často problém s měřením času, navíc:

Testing JavaScript performance on Windows XP (Update: and Vista) is a crapshoot, at best. With the system times constantly being rounded down to the last queried time (each about 15ms apart) the quality of performance results is seriously compromised. Dramatically improved performance test suites are going to be needed in order to filter out these impurities, going forward.

více viz

http://ejohn.org/blog/accuracy-of-javascript-time/

Martin Hassman

Ano, tyto závěry jsou diskutovány v odstavci Testovací platforma.

alblaho

Sorry, příště musím být pozornější.

Tom

Škoda že to do velkého testu nestihl Caracan..
http://my.opera.com/core/blog/2009/02/04/carakan

Martin

Tak jsem provedl menší test několika prohlížečů v Linuxu.
Není to tak dokonalé, všechny testy jsem neopakoval (ale výsledky náhodně zopakovaných testů se téměř nelišily).
Kvůli času jsem prováděl pouze test Dromaeo JavaScript.
CPU: Intel C2D T5500, 1.66 GHz
RAM: 3GB
Linux: Ubuntu 8.10, KDE 4.1.3
Testované prohlížeče: FF3.0.5, Konqueror 4.1.3, Epiphany 2.24.1 – gecko, Epiphany 2.24.1 – webkit. Všechny prohlížeče jsou kompilovány pro i396 s distribučními parametry kompilace.

Výsledky:
SunSpider (ms): FF 5225, Konq 7086, Epip-gecko 5380, Epip-webkit 4240
V8 (score): FF 125, Konq 84.5, Epip-gecko 126, Epip-webkit N/A
Dromaeo/JS (run/s): FF 23.64, Konq 31.32, Epip-gecko 23.71, Epip-webkit 48.24

Protože nedoběhl test V8 v případě Epiphany – webkit, provedl jsem navíc ještě test Dromaeo V8. Výsledek (run/s): FF 5.14, Konq 3.56, Epip-gecko 4.95, Epip-webkit 9.01

Z uvedených rychlých testů vyplývá, že v případě FF ve Windows a Linux není až tak velký rozdíl.
FF a Epiphany-gecko vykazuje podobné výsledky, což je dáno použitím stejného jádra.
Konqueror v testu mírně propadl, i když test Dromadeo JS dopadl pro něj lépe než pro gecko.
Nejlépe z testovaných si vedl Epiphany – webkit. Ale na Chrome nemá. Uvidíme, až vyjde verze pro Linux.

Chtělo by to otestovat prohlížeče zkompilované přímo pro i686, jestli se to nějak výrazně projeví na výkonu.

vlk

konqueror jako neni prohlizec ?

šachy

Konqueror je IE s přidanou hodnotou. Není to prohlížeč.

PeS

Uhh, tak to jste trochu přestřelil. Konqueror má vlastní jádro, KHTML – http://en.wikipedia.org/wiki/KHTML. A že by šlo vzít jádro IE a obaleneé ho provozovat na linuxu….hms hms.
Každopádně škoda že tu není. I když, testy byly na windows platformě.

Martin Hassman

Je zbytečné, aby tam byl, když v testu je nástupce jeho jádra Webkit (schovaný v Safari).

Petr.Tomes

V tom případě by asi tedy výsledky všech současných verzí prohlížečů také měly být označeny za zbytečné na prospěch těch vývojových řad. :-)

Martin Hassman

Mají tam smysl pro srovnání. Ale jinak samozřejmě. Hlavní je krásná budoucnost. A hlavně rychlá.

Petr.Tomes

Minimálně ještě několik let, kdy bude většina návštěvníků používat výrazně zpomalené verze IE, si tvůrci stránek nedovolí nasadit náročnější prvky, které jiné prohlížeče zpracují plynule. Bohužel.

Anonymní

diky za super serial. vyborne napsane, velmi poucne… good job!

Antonin Hildebrand

Vyborny serial. Skvela prace Davide. Diky!

ondrej

vysledky testu pod mac os pro safari:

safari3.2
SunSpider – 3679.6ms
V8 – 215 bodu

webkit
SunSpider – 853.8ms
V8 – 2154 bodu

opravte si to:)

a to mam uptime tejden

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.