JavaScript benchmark řetězce, regulární výrazy a asociativní pole

Podobné dokumenty
1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

1 Webový server, instalace PHP a MySQL 13

1. Webový server, instalace PHP a MySQL 13

MATLABLINK - VZDÁLENÉ OVLÁDÁNÍ A MONITOROVÁNÍ TECHNOLOGICKÝCH PROCESŮ

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

manažerského řízení HW a SW požadavky pro sw ATTIS

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Testovací protokol. webový generátor PostSignum. sada PIIX3; 1 GB RAM; harddisk 20 GB IDE OS: Windows Vista Service Pack 2 SW: Internet Explorer 9

Využití tabulkového procesoru MS Excel

SW ATTIS nástroje. HW a SW požadavky pro sw ATTIS. manažerského řízení. Verze manuálu: 3.5 Datum:

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

1. SYSTÉMOVÉ POŽADAVKY / DOPORUČENÁ KONFIGURACE HW A SW Databázový server Webový server Stanice pro servisní modul...

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

SYSTÉM ZPRACOVÁNÍ DAT FOTOVOLTAICKÉHO SYSTÉMU A METEOSTANICE

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

DUM 06 téma: Tvorba makra pomocí VBA

INOVACE PŘEDMĚTŮ ICT. MODUL 11: PROGRAMOVÁNÍ WEBOVÝCH APLIKLACÍ Metodika

XSLT pomocí JavaScriptu v Mozille (... Opeře a Safari)

Vstupní požadavky, doporučení a metodické pokyny

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Internetový prohlížeč-vyhledávání a ukládání dat z internetu do počítače

Rozklad na prvočinitele. 3. prosince 2010

Testovací protokol. webový generátor I.CA. Windows XP Windows Vista Windows 7 Internet Explorer Mozilla Firefox Google Chrome Apple Safari Opera

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ SPOLEČNOST DECADIC PROJEKT FRAMETRIX

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Software602 Form Designer

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Maturitní otázky z předmětu PROGRAMOVÁNÍ

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Sada 1 - PHP. 03. Proměnné, konstanty

Tvorba klientských skriptů v jazyce Java Script

Tabulkový procesor. Základní rysy

Příkazové skripty Procedurální jazyky Lua a ostatní

Testovací protokol USB Token Cryptomate

Formuláře. Internetové publikování. Formuláře - příklad

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Další nutný soubor je laydiv.js, ve kterém jsou uloženy funkce pro zobrazování virů na ploše a funkce pro odkaz na Teachers Guide.

Pointery II. Jan Hnilica Počítačové modelování 17

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

- kvalitní dokumentace k SW je vyžadovaným STANDARDEM. vzájemná provázanost SW (IS) ve velkých společnostech. aktuální přehledná srozumitelná

Úvod do programování 6. hodina

NÁVOD NA VYPLNĚNÍ ELEKTRONICKÉ ŽÁDOSTI O DOTACI

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

SEO OPTIMALIZACE PRO VYHLEDÁVAČE JEDNODUŠE

Ruby on Rails. Bc. Tomáš Juřík Bc. Bára Huňková

3 MOŽNÉ PŘÍSTUPY K TVORBĚ APLIKACÍ NAD SVG DOKUMENTY

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Paralelní výpočty ve finančnictví

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

Pole a kolekce. v C#, Javě a C++

dovolují dělení velkých úloh na menší = dekompozice

LabView jako programovací jazyk II

DINOX IP kamery řady: DDC-xxxx DDR-xxxx DDX-xxxx DDB-xxxx

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Standardní algoritmy vyhledávací.

PHP. nejen pro začátečníky. $c; echo { Martin Pokorný. Vzdìlávání, které baví Nakladatelství a vydavatelství.

Nový Node Monitor. 13. prosince Lukáš Turek Praha12.Net

Programové vybavení počítače

ALGORITMIZACE A PROGRAMOVÁNÍ

Podrobný postup pro vyplnění, odeslání a stažení žádosti o poskytnutí dotace prostřednictvím veřejnoprávní smlouvy v elektronickém systému dle

3. HODINA. Prohlížeče Druhy prohlížečů Přehled funkcí Bc. Tomáš Otruba, Informatika 7. třída 1

Software pro vzdálenou laboratoř

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

8 Třídy, objekty, metody, předávání argumentů metod

Základní informace a postup instalace systému IS MPP

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

Střední odborná škola a Střední odborné učiliště, Hořovice

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

SimBIm uživatelská dokumentace

Implementační manuál aplikace Essox Lite pro programátora/webmastera e-shopu

Projekt z předmětu Testování softwarových systémů

Nová áplikáce etesty zá te z ove testová ní

Pro využití aktivního odkazu (modrý a podtržený) použijte klávesu Ctrl + kliknutí myší.

Algoritmizace řazení Bubble Sort

Uživatelská příručka pro práci s Portálem VZP. Test kompatibility nastavení prohlížeče

HelpDesk. Co je HelpDesk? Komu je aplikace určena? Co vám přinese?

Instalace a konfigurace web serveru. WA1 Martin Klíma

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Universita Pardubice Fakulta elektrotechniky a informatiky. Mikroprocesorová technika. Semestrální práce

Reranking založený na metadatech

Generování žádosti o certifikát Uživatelská příručka

NSWI096 - INTERNET JavaScript

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

MBI - technologická realizace modelu

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

Ročníkový projekt DYNAMICKÉ HTML. Projektová dokumentace. Jan Ehrlich, Petr Marek, Tomáš Marván, Martin Paľo. Vedoucí projektu: RNDr.

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

MQL4 COURSE. By Coders guru -5 Smyčky & Rozhodnutí Part 1

Maturitní projekt do IVT Pavel Doleček

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

17. července :51 z moravec@yahoo.com

2. úkol MI-PAA. Jan Jůna (junajan)

InterSystems Caché Post-Relational Database

Transkript:

Technologie vývoje webových aplikací JavaScript benchmark řetězce, regulární výrazy a asociativní pole Matěj Outlý & Jaroslav Mlejnek Abstrakt Použití skriptovacího jazyka JavaScript na internetových stránkách je dnes už skoro samozřejmostí. Tvůrcům webů dává možnost přiblížit internetové prezentace klasické desktopové aplikaci a nezřídka kdy je JavaScriptový kód i více jak tísíci řádkový. Tento referát podává přehled o rychlosti vykonávání JavaScriptových příkazů v jednotlivých dostupných internetových prohlížečích. Konkrétně je pak zaměřen na práci s řetězci, regulárními výrazy a asociativním polem. Prezentovány jsou nejen výsledky měření, ale i popis jednotlivých testů a framework, který vypočtená data spravuje. 1 Úvod V referátu se budeme zabývat testováním implementace řetězců, regulárních výrazů a asociativních polí včetně jejich nejpoužívanějších funkcí (metod) v interpretovaném skriptovacím jazyce JavaScript v běžných internetových prohlížečích. Jsou jimi: Mozilla Firefox, Opera, Microsoft Internet Explorer, Apple Safari a Konqueror. Tomuto testování (a nejen tomuto testování) se říká benchmarking. Obecně za benchmark je považováno vykonání (proces) nějakého programu nebo sady programů za účelem zjištění výkonu testovaného subjektu. Testovaným subjektem může být např. CPU (z oblasti hardware) nebo kompilátor (z oblasti software). Za benchmark je považován také onen samotný program, pomocí nějž testujeme. Definici benchmarku můžeme ještě více zobecnit a říci, že benchmark je metoda k porovnávání výkonu různých testovaných subjektů běžících v různých prostředích. V našem případě metoda znamená porovnávání časové délky vykonávání generátorem vygenerovaného JavaScriptového kódu, 1

testovaným subjektem je implementace JavaScriptu v internetovém prohlížeči a prostředími jsou běžně dostupné internetové prohlížeče. Smyslem uskutečnění tohoto měření je zjistit, jak si prohlížeče poradí s objemnějším JavaScriptovým kódem (30 MB zdrojového kódu a více) a jak zvládají práci s extrémními daty. Naše testy se nesnaží o vystižení reálných úloh. 2 Testy Každý test je vygenerován zvláštním parametrizovatelným generátorem naprogramovaným v C++. Sestavený JavaScriptový kód se sestává z jediné funkce run(), viz zdrojový kód 1. // my_test.js // function run() { // kód testu... } return true; Zdroj. kód 1: kostra testu. Všechny generátory mají společnou kostru viz zdrojový kód 2. Nejprve jsou deklarovány proměnné, které budou dále v JavaScriptovém kódu použity. Poté následují dva do sebe vnořené cykly, které budeme dále označovat vnějším a vnitřním cyklem. Generátor zpravidla funguje tak, že na začátku každého vnějšího cyklu vygeneruje náhodná data, která jsou následně dokola zpracovávána vnitřním cyklem. Část zdrojového kódu uvnitř vnitřího cyklu označená opakované provádění kroků testu generuje výkonné příkazy testující danou oblast (třídění asociativních polí, vyhledávání v řetězcích atp.). Samotné výkonné příkazy jsou zpravidla ve skupinách po šesti a snaží se použít všechny funkce a JavaScriptové operátory týkající se dané oblasti. Konstanta PATTERN_LENGTH udává počet opakování výkonných příkazů testujících danou oblast resp. podoblast. Konstanta ITERATION_NUM nastavuje počet opakování celého testu. Zadefinováním či nedefinováním USING_FOR_LOOP zůstává stejná funkčnost testu, rozliší se pouze způsob rozšíření JavaScriptového kódu. V prvním případě, definováním USING_FOR_LOOP, bude test zopakován pomocí JavaScriptové smyčky 2

for, kód bude mít velikost jednoho testu + režie (viz 2). Nevýhodou je však, že do každého vnějšího cyklu vstupují stále stejná data (pouze jednou vygenerovaná generátorem), což má za následek větší pravděpodobnost zanesení statistické chyby do testu. Nedefinováním USING_FOR_LOOP bude výsledný kód obsahovat USING_FOR_LOOP test zřetězený za sebou + režii. Vznikne tedy test s lepšími daty, avšak mnohonásobně větší soubor, který prohlížeče musí umět správně načíst. Všechny použité testy jsou vygenerovány generátorem s definovaným USING_ FOR_LOOP kvůli prohlížeči Opera, který v základním nastavení není schopen několik desítek MB velký JavaScript načíst. Rozmezí velikostí použitých testů je od 34kB do 2,5MB. V dalším textu budeme pojmem test myslet jedno zavolání funkce run(). // Deklarace použitých JavaScriptových proměnných. o << "var ac1;" << endl; o << "var ac2;" << endl; o << "var ac3;" << endl;... #ifdef USING_FOR_LOOP o << "for (var i = 0; i < " << ITERATION_NUM << "; ++i) {" << endl; #else for (int i = 0; i < ITERATION_NUM; ++i) { #endif // Inicializace JavaScriptových proměnných // pro jednu vnější iteraci.... for (int i = 0; i < PATTERN_LENGTH; ++i) { // Opakované provádění kroků testu o << "ac3 = ac1.concat(ac2);" << endl; o << "ac3 = ac2.concat(ac1);" << endl;... } #ifdef USING_FOR_LOOP o << "}" << endl; #else } #endif Zdroj. kód 2: kostra generátoru jednoho testu. 3

2.1 Spojování dlouhých řetězců První test má za úkol otestovat rychlost implementace spojování textových řetězců. Délka řetezce se pohybuje řádově ve stovkách znaků a testován je zejména operátor + na objektu String, tedy operátor zřetězení a dále jeho metoda concat. Obě varianty pouze spojí dva řetězce za sebe. 2.2 Podřetězce řetězců Tento test vybírá podřetězce náhodné délky pomocí metod substring, substr a slice objektu String. Tyto metody pracují v zásadě stejně, liší se pouze parametry. Vstupní řetezec má opět délku řádově ve stovkách znaků, délka podřetezce se postupně zvětšuje. 2.3 Hledání v řetězci V tomto testu se jedná o jednoduché vyhledávání podřetězce v textu. Jsou použity metody indexof, lastindexof a match objektu String. Je asi zřejmé, že metoda indexof vrací index prvního výskytu hledaného podřetězce, metoda lastindexof naopak poslední a metoda match se chová stejně jako indexof, pokud je jí jako parametr předán obyčejný řetezec (tedy ne reguární výraz), proto je do tohoto testu také zařazena. Krátké hledané podřetězce jsou generovány náhodně, dále je pro vyhledávání použit jeden nikoli náhodný, ale o hodně delší podřetězec. Vstupní řetězec má stejnou délku jako v předchozím testu. 2.4 Validace řetězce pomocí regulárních výrazů Otestování pouhé validace podle regulárního výrazu (tedy test na shodu) je realizováno pomocí metody test objektu RegExp. Pro otestování je použito celkem 6 různých regulárních výrazů s postupně rostoucí složitostí. Generovány jsou po-stupným nabalováním složitosti s ohledem na řetězec, na kterém se bude testovat. 2.5 Nahrazení v řetězci pomocí regulární výrazů Stejně jako předchozí test používá šesti různých regulárních výrazů k otestování metody replace na objektu RegExp. 4

Tato metoda má za úkol nahradit ta místa, kde vstupní text matchuje s regulárním výrazem, nějakým, v našem případě náhodně vygenerovaným, řetězcem. Použité regulární výrazy jsou generovány obdobným způsobem jako v předchozím testu. 2.6 Rozdělení řetězce na podřetězce pomocí regulárních výrazů Poslední test používající regulární výrazy je zaměřen na rozdělení vstupního textu do pole podle daného regulárního výrazu. To odpovídá metodě split, opět na objektu RegExp. Regulární výrazy jsou stejné (stejně generované) jako v předchozích testech. 2.7 Hledání v poli Další skupina testů začíná pouhým otestováním vybírání prvků z asociativního pole. Jediné úskalí testu spočívá v tom, že pole obsahuje řádově tisíce prvků (dlouhých řetězců) indexované řetězcovými klíči o délce ve stovkách znaků. Testován je tedy operátor [] objektu Array. 2.8 Třídění pole Tento test je zaměřený na třídění dlouhých asociativních polí s řetězcovými klíči o délce opět ve stovkách znaků. Test se snaží po každém třídění pole opětovně rozházet např. změnou nějakého prvku za nový náhodně vygenerovaný. Testuje se tedy zejména metoda sort na objektu Array. 2.9 Konkatenace polí Konečně poslední test má za úkol pouhé spojování dlouhých asociativních polí (opět řádově v tisícovkách prvků). Testujeme tedy metodu concat objektu Array. 3 Framework Pro snadnější správu testů byl vytvořen framework zajišťující výběr testu, spuštění testu, uložení výsledků a vytvoření skriptu pro statistický software R. Framework je naprogramován ve skriptovacím jazyce PHP, v našem případě běží na webovém serveru Apache a data ukládá do databáze MySQL. Adresářová struktura: 5

tests/ adresář obsahující jednotlivé testy, test spojování velkých asoc. polí, test vyhledávání podle klíče v asoc. poli, test třídění velkých asoc. polí, test na shodu s regulárním výrazem, test na rozdělení podle reg. výrazu, test na nahrazení podle reg. výrazu, test spojování dlouhých řetězců, test na podřetězce a test vyhledávání v řetězcích. index.php Výchozí stránka s nastavením parametrů testu, R.php generátor R skriptů, run.php průběh výpočtu, save.php uložení vypočtených výsledků do databáze a stat.php zobrazení vypočtených dat. 3.1 Parametry testu index.php V internetovém prohlížeči je možno zvolit tyto parametry testu: typ testu automaticky generovaný seznam dostupných testů umístěných v podadresáři tests/, internetový prohlížeč framework automaticky vybere správný prohlížeč, počítač manuální výběr stroje, na kterém test probíhá, počet iterací počet opakování vybraného testu a iterovat pomocí JavaScriptového for cyklu způsob opakování vybraného testu, a to buď spuštění funkce run() v rámci vygenerovaného for cyklu a nebo několikanásobným vložením JavaScriptového skriptu volajícího funkci run() do kódu za sebe. Kliknutím na tlačítko run the test jsou parametry předány stránce run.php. 6

3.2 Spuštění testu (výpočet) run.php PHP skript run.php na základě získaných parametrů sestaví webovou stránku obsahující elementy <script> s odkazem na soubor s JavaScriptovým testem a voláním procedury run(), která test spouští. Navíc před samotným spuštěním každého testu funkcí run() zaznamená aktuální čas a po skončení běhu testu vypočítá z nového aktuálního času a zaznamenaného času dobu průběhu v milisekundách. Výsledky průběžně ukládá do pole. <! načtení testu ze souboru > <script type="text/javascript" src="tests/my_test.js"> </script>... <! i-tá iterace testu > <script type="text/javascript"> start = new Date(); if (!run()) alert("error."); end = new Date(); results[i] = end - start; </script>... <! sestavení GET požadavku a automatické přesměrování > <script type="text/javascript"> window.location = "save.php?results=" + results.join(";"); </script> Zdroj. kód 3: testovací stránka. Po zavolání poslední iterace testu sestaví GET požadavek s výsledky měření a proběhne automatické přesměrování na skript save.php. 3.3 Uložení výsledků měření save.php Jakmile skončí všechna měření, jejich výsledky jsou předány skriptu save.php, který je pouze uloží do databáze MySQL. 3.4 Generování skriptu pro R R.php K analýze naměřených dat je použit statistický software R. Aby skripty pro tento software nemusely být psány ručně, byl naprogramován jejich parametrizovatelný generátor. 7

V první fázi výpočtu jsou ze všech získaných dat vypočteny aritmetické průměry, v ostatních fázích se počítá pouze s nimi. Podporované výstupy jsou celkový přehled měření všech testů na všech prohlížečích po testech, celkový přehled měření všech testů na všech prohlížečích po prohlížečích, sečtená doba průměrů běhu všech testů po prohlížečích, sečtená doba průměrů běhu testů v jednotlivých kategoriích, přehled všech provedených testů na vybraném prohlížeči a přehled všech prohlížečů, na kterých byl vybraný test spuštěn. 4 Závěrečná statistika Bylo provedeno celkem 9 testů, každý po alespoň 10 opakováních. Testovanými prohlížeči byly Microsoft Internet Explorer 6.0, 7.0 a testovací verze 8.0, Mozilla Firefox 1.0, 1.5, 2.0 a testovací verze 3.0, Opera 7.5, 8.0, 9.2 a testovací verze 9.5, Apple Safari 3.1, Konqueror 3.5 a 4.0. Časy uváděné v grafech jsou doby běhu funkce run() v milisekundách (ms). Tato doba ale de-facto nemá nějakou vypovídající hodnotu, nemůžeme např. říci, že spojení dvou řetězců stojí 4µs. Berme proto dobu běhu funkce run() pouze jako poměrové měřítko. Benchmark proběhl na dvou strojích, každý s jinou hardwarovou výbavou a operačním systémem. Většina testů proběhla na stroji s procesorem Mobile AMD Sempron 3000+, frekvencí 1, 8GHz a operačním systémem Microsoft Windows XP. Benchmark majoritních linuxových prohlížečů proběhl na stroji s procesorem Intel Core 2 Duo 7500, frekvencí jádra 2,2GHz a s operačním systémem GNU/Linux distribuce Gentoo. 8

4.1 Celková statistika stroj s MS Windows Graf 4 ukazuje přehled všech prohlížečů jak dopadly v jednotlivých testech. Summary for jbook_xp Safari 3.1 Opera 9.5 Opera 8.0 Opera 7.5 Konqueror 4.0 IE 8.0 IE 7.0 IE 6.0 Firefox 3.0 Firefox 1.5 Firefox 1.0 0 500000 1000000 1500000 Graf 4: Celková statistika windowsového stroje. Z grafu je patrné, že prohlížeče Opera mají s JavaScriptovými regulárními výrazy vcelku problémy, zvláště pak test nahrazení podřetězce podle regulárního výrazu. Vzhledem k tomu, že v tomto testu neuspěly všechny verze tohoto internetového prohlížeče, lze vyloučit náhodnou chybu vyskytující se ve zdrojovém kódu JavaScriptového interpreteru. Na grafu je také vidět, že tvůrci Opery na regulárních výrazech stále pracují a (nepočítáme-li testovací verzi) časy běhu skriptů zkracují. Nejlépe nedopadl ani test na třídění polí u prohlížečů Konqueror, který oproti ostatním prohlížečům mnohonásobně zaostává. Protože algoritmus třídění (resp. reverze, který je také použit v tomto testu) patří mezi triviální algoritmy, usuzujeme, že zde se o chybu v interpreteru už jedná. K tomuto závěru nás také vede společné jádro WebKit prohlížeče Konqueror a Apple Safari, který v testech naopak suveréně vyhrává. 4.2 Statistika dle kategorií testů Graf 5 ukazuje součet průměrných dob přes všechny testy v daných kategoriích (řetězce, regulární výrazy a asociativní pole) a udává celkovou výkonost jednotlivých prohlížečů v těchto kategoriích. 9

Total summary for jbook_xp Strings RegExps Safari 3.1 Opera 9.5 Opera 8.0 Opera 7.5 Konqueror 4.0 IE 8.0 IE 7.0 IE 6.0 Firefox 3.0 Firefox 1.5 Firefox 1.0 Arrays 0 500000 1000000 1500000 2000000 Graf 5: Výkon prohlížečů v testovaných kategoriích. Jak již bylo zmíněno výše v popisu předchozí statistiky, internetový prohlížeč Opera zaostává v regulárních výrazech, Apple Safari má oproti všem prohlížečům nezanedbatelný náskok a překvapivě dobře dopadl i internetový prohlížeč Microsoft Internet Explorer. 10

4.3 Celkový výkon prohlížečů Data na obrázku 6 jsou získaná stejným způsobem, jako v předchozí statistice, tedy sečtěním průměrných hodnot výsledků jednotlivých testů. Tentokrát je však statistika celková, nekategorizovaná. Total summary on jbook_xp Safari 3.1 Opera 9.5 Opera 8.0 Opera 7.5 Konqueror 4.0 IE 8.0 IE 7.0 IE 6.0 Firefox 3.0 Firefox 1.5 Firefox 1.0 0 500000 1000000 1500000 2000000 Graf 6: Celkový výkon jednotlivých prohlížečů. Nyní můžeme stanovit jakési pořadí rychlosti prohlížečů dle výkonosti: 1. Apple Safari 2. Microsoft Internet Explorer 3. Mozilla Firefox 4. Opera 5. Konqueror Konqueror by svými výkony měl zaujímat příčku těsně za prohlížečem Mozilla Firefox, avšak výsledek testu třídění polí ho bohužel dostal na poslední místo. 4.4 Celková statistika přes prohlížeče Graf 7 nabízí ještě jeden alternativní pohled na celkovou statistiku, tentokrát setříděnou dle internetových prohlížečů. 11

Summary for jbook_xp Safari 3.1 Opera 9.5 Opera 8.0 Opera 7.5 Konqueror 4.0 IE 8.0 IE 7.0 IE 6.0 Firefox 3.0 Firefox 1.5 Firefox 1.0 0 500000 1000000 1500000 Graf 7: Celkový přehled výkonů prohlížečů v jednotlivých testech. 4.5 Výsledky testů po prohlížečích Zde jsou k dispozici jednotlivé výsledky testů setříděné po prohlížečích, které ukazují, v jakých testech si jaký prohlížeč stojí. Grafy jsou bez komentáře. 4.5.1 Mozilla Firefox Firefox 1.0 on jbook_xp 0 20000 40000 60000 80000 Graf 8: Prohlížeč Firefox 1.0. 12

Firefox 1.5 on jbook_xp 0 20000 40000 60000 80000 Graf 9: Prohlížeč Firefox 1.5. on jbook_xp 0 20000 40000 60000 80000 Graf 10: Prohlížeč. 13

Firefox 3.0 on jbook_xp 0 5000 10000 15000 20000 25000 Graf 11: Prohlížeč Firefox 3.0, testovací verze. 4.5.2 Opera Opera 7.5 on jbook_xp 0 500000 1000000 1500000 Graf 12: Prohlížeč Opera 7.5. 14

Opera 8.0 on jbook_xp 0e+00 1e+05 2e+05 3e+05 4e+05 5e+05 6e+05 Graf 13: Prohlížeč Opera 8.0. on jbook_xp 0e+00 1e+05 2e+05 3e+05 4e+05 Graf 14: Prohlížeč. 15

Opera 9.5 on jbook_xp 0e+00 1e+05 2e+05 3e+05 4e+05 5e+05 6e+05 Graf 15: Prohlížeč Opera 9.5, testovací verze. 4.5.3 Microsoft Internet Explorer IE 6.0 on jbook_xp 0 2000 4000 6000 8000 10000 12000 14000 Graf 16: Prohlížeč Microsoft Internet Explorer 6.0. 16

IE 7.0 on jbook_xp 0 5000 10000 15000 Graf 17: Prohlížeč Microsoft Internet Explorer 7.0. IE 8.0 on jbook_xp 0 2000 4000 6000 8000 10000 Graf 18: Prohlížeč Microsoft Internet Explorer 8.0, testovací verze. 17

4.5.4 Apple Safari Safari 3.1 on jbook_xp 0 1000 2000 3000 4000 5000 6000 7000 Graf 19: Prohlížeč Apple Safari 3.1. 4.5.5 Konqueror Konqueror 4.0 on jbook_xp 0 500000 1000000 1500000 Graf 20: Prohlížeč Konqueror 4.0. 18

Konqueror 4.0 on jbook_xp 0 5000 10000 15000 Graf 21: Prohlížeč Konqueror 4.0 bez testu array_sort. 4.6 Výsledky testů po testech V každém testu je velmi zřetelně vidět rychlost prohlížeče Apple Safari. Grafy jsou bez komentáře. 4.6.1 Spojování asociativních polí on jbook_xp Safari 3.1 Opera 9.5 Opera 8.0 Opera 7.5 Konqueror 4.0 IE 8.0 IE 7.0 IE 6.0 Firefox 3.0 Firefox 1.5 Firefox 1.0 0 5000 10000 15000 20000 25000 30000 35000 Graf 22: Test array_concat. 19

4.6.2 Vyhledávání podle klíče v asoc. poli on jbook_xp Safari 3.1 Opera 9.5 Opera 8.0 Opera 7.5 Konqueror 4.0 IE 8.0 IE 7.0 IE 6.0 Firefox 3.0 Firefox 1.5 Firefox 1.0 0 5000 10000 15000 20000 Graf 23: Test array_find. 4.6.3 Třídění velkých asociativních polí on jbook_xp Safari 3.1 Opera 9.5 Opera 8.0 Opera 7.5 Konqueror 4.0 IE 8.0 IE 7.0 IE 6.0 Firefox 3.0 Firefox 1.5 Firefox 1.0 0 500000 1000000 1500000 Graf 24: Test array_sort. 20

4.6.4 Nahrazení podle regulárního výrazu on jbook_xp Safari 3.1 Opera 9.5 Opera 8.0 Opera 7.5 Konqueror 4.0 IE 8.0 IE 7.0 IE 6.0 Firefox 3.0 Firefox 1.5 Firefox 1.0 0 500000 1000000 1500000 Graf 25: Test regexp_replace. 4.6.5 Rozdělení podle regulárního výrazu on jbook_xp Safari 3.1 Opera 9.5 Opera 8.0 Opera 7.5 Konqueror 4.0 IE 8.0 IE 7.0 IE 6.0 Firefox 3.0 Firefox 1.5 Firefox 1.0 0 50000 100000 150000 200000 250000 Graf 26: Test regexp_split. 21

4.6.6 Testovaní na shodu on jbook_xp Safari 3.1 Opera 9.5 Opera 8.0 Opera 7.5 Konqueror 4.0 IE 8.0 IE 7.0 IE 6.0 Firefox 3.0 Firefox 1.5 Firefox 1.0 0 2000 4000 6000 8000 10000 12000 Graf 27: Test regexp_test. 4.6.7 Spojování dlouhých řetězců on jbook_xp Safari 3.1 Opera 9.5 Opera 8.0 Opera 7.5 Konqueror 4.0 IE 8.0 IE 7.0 IE 6.0 Firefox 3.0 Firefox 1.5 Firefox 1.0 0 20000 40000 60000 80000 100000 120000 Graf 28: Test string_concat. 22

4.6.8 Podřetězce on jbook_xp Safari 3.1 Opera 9.5 Opera 8.0 Opera 7.5 Konqueror 4.0 IE 8.0 IE 7.0 IE 6.0 Firefox 3.0 Firefox 1.5 Firefox 1.0 0 5000 10000 15000 Graf 29: Test string_substring. 4.6.9 Vyhledávání v řetězcích on jbook_xp Safari 3.1 Opera 9.5 Opera 8.0 Opera 7.5 Konqueror 4.0 IE 8.0 IE 7.0 IE 6.0 Firefox 3.0 Firefox 1.5 Firefox 1.0 0 10000 20000 30000 40000 50000 Graf 30: Test string_search. 4.7 Celková statistika stroj s Gentoo Linux Jak již bylo zmíněno, měření proběhlo také na počítači s instalovaným operačním systémem Gentoo Linux. Testovány byly tři majoritní prohlížeče: Mozilla Firefox 2.0, a Konqueror 3.5. Výsledky testů na tomto stroji jsou totožné s výsledky testů na stroji s Microsoft Windows (myšleno poměrově stejné, nikoliv absolutně). Dokonce prohlížeč 23

Summary for notemat_gentoo Konqueror 3.5 0e+00 2e+05 4e+05 6e+05 8e+05 Graf 31: Celková statistika linuxového stroje. Konqueror ve verzi 3.5 má stejné problémy s testem na třídění velkých asociativních polí jako jeho nástupce 4.0 lze tedy vyloučit chybu implementace JavaScriptového interpreteru způsobenou portem primárně linuxového internetového prohlížeče na operační systém Microsoft Windows. 4.8 Statistika dle kategorií testů Oproti statistice 5 najdeme v grafu 32 rozdíl v rychlosti zpracování řetězců. Prohlížeč Opera je na linuxovém stroji výkonově srovnatelný s ostatními prohlížeči. Připomeňme, že prohlížeč Opera byl přibližně 2 pomalejší než Firefox a Konqueror. 24

Total summary for notemat_gentoo Strings Konqueror 3.5 RegExps Arrays 0e+00 2e+05 4e+05 6e+05 8e+05 Graf 32: Výkon prohlížečů v testovaných kategoriích. 4.9 Celkový výkon prohlížečů I přesto, že Opera dosáhla lepších výsledků v testech na řetězce, výsledné pořadí se u těchto prohlížečů nezměnilo. Total summary on notemat_gentoo Konqueror 3.5 0e+00 2e+05 4e+05 6e+05 8e+05 Graf 33: Celkový výkon jednotlivých prohlížečů. Na operačním systému Linux je pořadí prohlížečů nezměněné: 1. Mozilla Firefox 2. Opera 3. Konqueror 25

4.10 Celková statistika přes prohlížeče Poslední přehled provedených testů na prohlížečích: Summary for notemat_gentoo Konqueror 3.5 0e+00 2e+05 4e+05 6e+05 8e+05 Graf 34: Celkový přehled výkonů prohlížečů v jednotlivých testech. 4.11 Výsledky testů po prohlížečích Zde jsou k dispozici jednotlivé výsledky testů setříděné po prohlížečích, které ukazují, v jakých testech si jaký prohlížeč stojí. Grafy jsou bez komentáře. 4.11.1 Mozilla Firefox on notemat_gentoo 0 5000 10000 15000 20000 25000 30000 35000 Graf 35: Prohlížeč. 26

4.11.2 Opera on notemat_gentoo 0 50000 100000 150000 200000 Graf 36: Prohlížeč. 4.11.3 Konqueror Konqueror 3.5 on notemat_gentoo 0e+00 2e+05 4e+05 6e+05 8e+05 Graf 37: Prohlížeč Konqueror 3.5. 4.12 Výsledky testů po testech Grafy jsou bez komentáře. 27

4.12.1 Spojování asociativních polí on notemat_gentoo Konqueror 3.5 0 5000 10000 15000 20000 25000 30000 Graf 38: Test array_concat. 4.12.2 Vyhledávání podle klíče v asoc. poli on notemat_gentoo Konqueror 3.5 0 2000 4000 6000 8000 10000 Graf 39: Test array_find. 28

4.12.3 Třídění velkých asociativních polí on notemat_gentoo Konqueror 3.5 0e+00 2e+05 4e+05 6e+05 8e+05 Graf 40: Test array_sort. 4.12.4 Nahrazení podle regulárního výrazu on notemat_gentoo Konqueror 3.5 0 50000 100000 150000 200000 Graf 41: Test regexp_replace. 29

4.12.5 Rozdělení podle regulárního výrazu on notemat_gentoo Konqueror 3.5 0 20000 40000 60000 80000 Graf 42: Test regexp_split. 4.12.6 Testovaní na shodu on notemat_gentoo Konqueror 3.5 0 500 1000 1500 2000 2500 3000 Graf 43: Test regexp_test. 30

4.12.7 Spojování dlouhých řetězců on notemat_gentoo Konqueror 3.5 0 500 1000 1500 2000 Graf 44: Test string_concat. 4.12.8 Podřetězce on notemat_gentoo Konqueror 3.5 0 500 1000 1500 2000 Graf 45: Test string_substring. 31

4.12.9 Vyhledávání v řetězcích on notemat_gentoo Konqueror 3.5 0 500 1000 1500 2000 2500 3000 Graf 46: Test string_search. 5 Dnes používané benchmarky 5.1 SunSpider a Dromaeo SunSpider JavaScript Benchmark, který lze nalézt na internetové adrese http://webkit.org/perf/sunspider-0.9/sunspider.html, je představitelem opačného způsobu testování, než byl náš benchmark. Zatímco naše testy vyžadovaly od prohlížečů maximální výkon a testovaly jejich chování v extrémních situacích, SunSpider Benchmark se snaží co nejvěrněji vystihnout realitu (reálné úlohy). Dalším rozdílem oproti našim testům je, že SunSpider Benchmark netestuje pouze vybrané oblasti JavaScriptu, ale je komplexní toto mj. vyplývá i z jeho snahy být co nejblíže realitě. Tento benchmark testuje jazyk JavaScript jako takový, nikoliv DOM. Ze SunSpider benchmarku vychází Mozillou vytvořený benchmark Dromaeo, který obsahuje podmnožinu SunSpider testů. Nalezneme ho na internetové adrese http://dromaeo.com/. 32

5.2 DHTML Benchmark & Drawing Perfomance Test Tyto benchmarky http://people.opera.com/ pettern/performance-1.html a http://people.opera.com/ pettern/performance-2.html jsou zaměřeny na DOM. Rychlost (výkon prohlížeče) je zde udávána jako počet snímků za sekundu vzhledem k počtu objektů. 33

Reference [1] Mozilla: Dromaeo. http://dromaeo.com/ [2] Jak psát web. http://www.jakpsatweb.cz/ [3] Měřím já, měříš ty: za JavaScript rychlejší.. http://met.blog.root.cz/2008/04/11/merim-ja-meristy-za-javascript-rychlejsi/ [4] Microsoft support: How to set time-out period for script. http://support.microsoft.com/kb/175500 [5] Opera: dhtml benchmark. http://people.opera.com/ pettern/performance-1.html [6] Opera: Drawing Perfomance Test. http://people.opera.com/ pettern/performance-2.html [7] SunSpider JavaScript Benchmark. http://webkit.org/perf/sunspider-0.9/sunspider.html [8] W3Schools: JavaScript Reference. http://www.w3schools.com/jsref/default.asp 34