Je sedmý testovací IE9 skutečně nejrychlejší?

Sedmá verze testovacího Internet Exploreru 9 Platform Preview překonala v benchmarku Sunspider veškerou konkurenci včetně Opery a Chromu. Má to ale jeden malý háček.

Zatímco Česká republika 17. listopadu slavila, v americkém Redmondu do světa vypustili v pořadí už sedmou testovací verzi Internet Exploreru Platform Preview. Už jen to způsobilo na síti menší pozdvižení, je to totiž teprve několik málo týdnů, co Microsoft představil šestou verzi. Co je tedy v sedmé verzi nového?

IE9 dosahuje nejvyššího skóre v testu Sunspider

Tou hlavní novinkou je zase rychlejší Javascript. Má to ale háček. Už před třemi týdny jsem varoval, že použití Sunspideru jakožto objektivního javascriptového benchmarku začíná být poněkud problematické. Test si sice v posledních letech získal obrovské renomé, jelikož díky své jednoduchosti nemá problém prakticky s žádným prohlížečem včetně starších verzí, na druhou stranu jsou ale rozdíly mezi jednotlivými hráči na trhu už spíše jen teoretické.

test drive.png
Jako vždy i tentokrát na stránkách Test Drive přibylo několik výkonostních testů

Sunspider měří výsledky nikoliv skrze nějaké abstraktní skóre, ale pomocí času. Rozdíly mezi posledními verzemi prohlížečů se pohybují v řádu desítek milisekund. Jakou relevanci pro běžné surfování na webu pak takový benchmark má? Odpovím si sám – skoro žádnou.

Jednoduše řečeno, současné prohlížeče jsou už natolik výkonné a inteligentní, že je pro ně Sunspider příliš pomalý a hloupý. A z této definice vzešlo i druhé pozdvižení. Pokud jste celou situaci okolo uvedení Platform Preview 7 sledovali, možná jste na síti objevili hromadu článků, podle kterých Microsoft podváděl a upravil svůj prohlížeč tak, aby dosáhl toho nejvyššího skóre. Tou hlavní novinkou je totiž skutečnost, že Internet Explorer 9 překonal v Sunspideru všechny ostatní. Včetně Opery a Chromu.

sunspider.png
Sunspider zpracovaný autory oficiálního IE Blogu

Jak je to možné? Je IE9 skutečně tak špičkový? Pominu-li skutečnost, že i v předchozích verzích už byly rozdíly spíše teoretické (řádově desítky milisekund), je tu ještě něco jiného – takzvaný „dead code“.

Dead code je v počítačové hantýrce takový kód, který sice vytěžuje procesor, ale nemá žádný smysl. Vypůjčím si nyní krátkou ukázku přímo z IE Blogu:

function spocitej(a, b) {
  var x;
  for(var i = 0; i < 10000; i++) {
    x = a + b;
  }
  return x;
}

Pokud jste se s programováním setkali leda tak na střední škole, jen připomenu, že funkce výše má na vstupu dvě proměnné „a“ a „b“. Uvnitř je pak cyklus, který 10 000× zopakuje příkaz x = a + b. Sečte tedy hodnoty proměnných „a“ a „b“ a výsledek uloží do proměnné „x“. Co je na tomto kódu divného? Je to typická ukázka dead code, hodnota proměnné „x“ totiž bude pořád stejná. Jinými slovy tedy takový skript zcela zbytečně 10 000× spočítá to, co by spočítal hned na začátku při prvním průchodu cyklem.

Ale jenom díky zastaralému Sunspideru

Přesně tímto způsobem ovšem funguje většina javascriptových benchmarků. Ty mnohonásobně opakují nějaký jednoduchý úkon, a pak změří čas, jak dlouho to celé trvalo. Benchmarky zpravidla negenerují nic smysluplného, pouze se snaží prohlížeč co nejvíce zatížit. Pokud test spustíte na stejném počítači (se stejným procesorem), ale v různých prohlížečích, zjistíte, který prohlížeč takový vlastně úplně zbytečný Javascript spočítá rychleji a kterému to bude naopak trvat nejdéle. Na stejném principu nakonec funguje i Sunspider.

Takže kde je problém? Kdyby byl IE9 hloupý (nebo prostě normální), jednoduše by si nevšímal, že 10 000× zpracovává jeden a tentýž příkaz a zbytečně by dál zatěžoval procesor. IE9 a zvláště nový Platform Preview 7 ale pokročil právě v tomto bodě, ještě před interpretací Javascriptu tedy kód projde a pokusí se v něm najít podobný mrtvý neefektivní balast. V našem konkrétním případě by tedy IE9 zareagoval třeba tím způsobem, že by funkci proměnil asi takto:

function spocitej(a, b) {
  var x;
  x = a + b;
  return x;
}

Zrušil by tedy zcela zbytečný cyklus a nahradil ho pouze jediným příkazem, který do proměnné „x“ uloží součet proměnných „a“ a „b“. Procesor v takovém případě nebude zbytečně vytěžovaný a Javascript se zpracuje mnohem rychleji. Rychleji se spočítá i benchmark a IE9 tedy logicky získá vyšší skóre.

Inteligentní jádro

Teď je tedy otázka, jaký způsob práce je lepší. Osobně jsem přesvědčený, že je optimalizace dead kódu mnohem přínosnější, než zpracovávat kód tak jak je a nevšímat si, že mnohdy zpracovává úplně zbytečnosti. Kdyby Microsoft do IE9 vsadil výjimku pro Sunspider a další benchmarky, teprve by si mohla komunita začít stěžovat, že zde někdo nekale optimalizuje výsledky pro Sunspider a ty druhé.

Kdo je dnes tedy nejrychlejší? Kouzlo grafu, který zveřejnil i IE Blog, spočívá v tom, že Sunspider tuto odpověď už nezná. Než se prosadí někdo jiný, nebo jej autoři upraví pro potřeby dnešní doby, asi by bylo na místě si vybrat úplně jiný systém testování.

Tím nejlepším bude pochopitelně vždy reálná uživatelská zkušenost, jen tak totiž poznáte, co vám vyhovuje a jak si prohlížeč rozumí se skutečným každodenním webem.

Takže Sunspideře! Sloužil jsi dobře, možná ale nadešel čas, říci sbohem.

stáhnout program Internet Explorer 9 Preview 7 Licence: freeware, 17 MB
Autor: Microsoft
Web programu: ie.microsoft.com


Diskuze (20) Další článek: Podívejte se na úžasnou reklamu na Windows 7 a Live

Témata článku: , , , , , , , , , , , , , , , , ,