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?

Seriál: Do hlubin implementací JavaScriptu (14 dílů)

  1. Do hlubin implementací JavaScriptu: 1. díl – úvod 30.10.2008
  2. Do hlubin implementací JavaScriptu: 2. díl – dynamičnost a výkon 6.11.2008
  3. Do hlubin implementací JavaScriptu: 3. díl – výkonnostně nepříjemné konstrukce 13.11.2008
  4. Do hlubin implementací JavaScriptu: 4. díl – implementace v prohlížečích 20.11.2008
  5. Do hlubin implementací JavaScriptu: 5. díl – implementace mimo prohlížeče 27.11.2008
  6. SquirrelFish: reprezentace hodnot JavaScriptu a virtuální stroj 4.12.2008
  7. SquirrelFish: optimalizace vykonávání instrukcí a nativní kód 11.12.2008
  8. SquirrelFish: regulární výrazy, vlastnosti objektů a budoucnost 18.12.2008
  9. SpiderMonkey: zpracování JavaScriptu ve Firefoxu 8.1.2009
  10. SpiderMonkey: rychlá kompilace JavaScriptu do nativního kódu 15.1.2009
  11. V8: JavaScript uvnitř Google Chrome 22.1.2009
  12. Rhino: na rozhraní JavaScriptu a Javy 29.1.2009
  13. Velký test rychlosti JavaScriptu v prohlížečích 5.2.2009
  14. Javascriptové novinky: souboj o nejrychlejší engine pokračuje 19.3.2009

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?

Autor je vývojář se zájmem o programovací jazyky, webové aplikace a problémy programování jako takového. Vystudoval informatiku na MFF UK a během studií zde i trochu učil. Aktuálně pracuje v SUSE.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 27

Přehled komentářů

Firefox Opravdu FF3.2?
Martin Hassman Re: Opravdu FF3.2?
David Majda Re: Opravdu FF3.2?
Anonym ironie
rcs-34 Re: ironie
karf Re: ironie
x0nix Re: ironie
Anonym Re: ironie
Shabbi. IE7 je pomalý, ale až tak?
Martin Hassman Re: IE7 je pomalý, ale až tak?
Ped Re: IE7 je pomalý, ale až tak?
v6ak Problém nezávislosti? Možná, ale možná naopak.
alblaho Měření času
Martin Hassman Re: Měření času
alblaho Re: Měření času
Tom Caracan
Martin Další testy
vlk kde je konqueror ???
šachy Re: kde je konqueror ???
PeS Re: kde je konqueror ???
Martin Hassman Re: kde je konqueror ???
Petr.Tomes Re: kde je konqueror ???
Martin Hassman Re: kde je konqueror ???
Petr.Tomes Re: kde je konqueror ???
Anonym diky
Antonin Hildebrand diky za serial
ondrej virtualizace je nespravedliva:)
Zdroj: https://www.zdrojak.cz/?p=2935