JavaScript War : Firefox 5 – Chrome 13

In questa nuova rivoluzione Web chiamata per brevità HTML5, uno dei protagonisti è senza alcun dubbio il riesumato JavaScript. Tornato dalla tomba in cui sembrava essere stato sepolto per riportare nuova luce e dinamicità ai contenuti Web.

JavaScript, in quanto computazione client-side ha anche lo spiacevole effetto di condizionare le prestazioni di un sito e di scaricare il gravoso costo della sua esecuzione sui browser. Questa è la casus belli della JavaScript War che imperversa nei centri di sviluppo dei vari browser da qualche anno.

Iniziamo quindi ad analizzare la battaglia dei contendenti più accreditati: Firefox e Chrome.

Firefox

  • Versione: 5.0
  • Rendering: Geko 5.0
  • Motore JavaScipt: SpiderMonkey

Chrome

  • Versione: 13
  • Rendering: WebKit 535.1
  • Motore JavaScipt: V8 3.3.10.22

BENCHMARK 1 : SUNSPIDER 0.9.1

Il primo benchmark è SUNSPIDER di casa WebKit. Il test mi ha sorpreso perché Firefox risulta più performante di Chrome. Come potete vedere dal risultato (FROM è Firefox e TO è Chrome) la differenza è minima ma a favore di Firefox.

Risultato:

TEST                   COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:           *1.067x as slow*  735.1ms +/- 0.3%   784.3ms +/- 2.4%     significant

=============================================================================

  3d:                  *1.186x as slow*  102.4ms +/- 1.3%   121.4ms +/- 7.7%     significant
    cube:              *1.082x as slow*   37.8ms +/- 2.1%    40.9ms +/- 7.2%     significant
    morph:             *1.54x as slow*    18.6ms +/- 2.7%    28.7ms +/- 3.5%     significant
    raytrace:          *1.126x as slow*   46.0ms +/- 0.7%    51.8ms +/- 16.3%     significant

  access:              1.47x as fast      99.7ms +/- 1.4%    67.8ms +/- 5.9%     significant
    binary-trees:      4.46x as fast      25.0ms +/- 3.0%     5.6ms +/- 12.3%     significant
    fannkuch:          1.70x as fast      42.6ms +/- 2.3%    25.0ms +/- 6.5%     significant
    nbody:             *1.66x as slow*    15.0ms +/- 3.2%    24.9ms +/- 17.8%     significant
    nsieve:            1.39x as fast      17.1ms +/- 2.4%    12.3ms +/- 12.6%     significant

  bitops:              *1.77x as slow*    45.5ms +/- 1.3%    80.7ms +/- 7.9%     significant
    3bit-bits-in-byte: *7.47x as slow*     1.7ms +/- 20.3%    12.7ms +/- 20.6%     significant
    bits-in-byte:      1.43x as fast      25.7ms +/- 1.3%    18.0ms +/- 9.5%     significant
    bitwise-and:       *6.26x as slow*     4.3ms +/- 8.0%    26.9ms +/- 14.9%     significant
    nsieve-bits:       *1.67x as slow*    13.8ms +/- 6.4%    23.1ms +/- 17.6%     significant

  controlflow:         3.06x as fast      34.3ms +/- 1.0%    11.2ms +/- 31.5%     significant
    recursive:         3.06x as fast      34.3ms +/- 1.0%    11.2ms +/- 31.5%     significant

  crypto:              *1.090x as slow*   61.1ms +/- 1.2%    66.6ms +/- 12.4%     significant
    aes:               *1.116x as slow*   25.1ms +/- 1.6%    28.0ms +/- 11.7%     significant
    md5:               1.124x as fast     22.6ms +/- 1.6%    20.1ms +/- 26.1%     significant
    sha1:              *1.38x as slow*    13.4ms +/- 2.8%    18.5ms +/- 5.8%     significant

  date:                *1.059x as slow*  114.0ms +/- 1.0%   120.7ms +/- 3.5%     significant
    format-tofte:      1.82x as fast      81.6ms +/- 0.9%    44.9ms +/- 5.8%     significant
    format-xparb:      *2.34x as slow*    32.4ms +/- 1.9%    75.8ms +/- 3.7%     significant

  math:                1.33x as fast      73.5ms +/- 1.4%    55.3ms +/- 3.8%     significant
    cordic:            2.22x as fast      21.5ms +/- 1.8%     9.7ms +/- 6.1%     significant
    partial-sums:      *1.046x as slow*   28.5ms +/- 1.8%    29.8ms +/- 4.2%     significant
    spectral-norm:     1.49x as fast      23.5ms +/- 2.2%    15.8ms +/- 10.8%     significant

  regexp:              1.30x as fast      34.0ms +/- 2.6%    26.1ms +/- 2.7%     significant
    dna:               1.30x as fast      34.0ms +/- 2.6%    26.1ms +/- 2.7%     significant

  string:              *1.37x as slow*   170.6ms +/- 1.2%   234.5ms +/- 1.6%     significant
    base64:            *1.79x as slow*    10.4ms +/- 3.5%    18.6ms +/- 9.3%     significant
    fasta:             *1.145x as slow*   31.8ms +/- 2.8%    36.4ms +/- 2.5%     significant
    tagcloud:          ??                 52.3ms +/- 2.5%    53.4ms +/- 2.0%     not conclusive: might be *1.021x as slow*
    unpack-code:       *1.54x as slow*    53.9ms +/- 0.8%    82.9ms +/- 1.9%     significant
    validate-input:    *1.95x as slow*    22.2ms +/- 2.0%    43.2ms +/- 3.0%     significant

BENCHMARK 2 : V8 BENCHMARK

Questo è un benchmark piuttosto minimale fatto da Google appositamente per V8 e usato per il tuning dello stesso. C’è poco da sorprendersi che il risultato sia a vantaggio di V8 per un buon 168% in più.

Risultati Firefox:

Score: 1326 <----

Richards: 2606
DeltaBlue: 1351
Crypto: 2397
RayTrace: 550
EarleyBoyer: 1184
RegExp: 596
Splay: 2204

Risultati Chrome:

Score: 3560 <----

Richards: 4815
DeltaBlue: 5203
Crypto: 6233
RayTrace: 4653
EarleyBoyer: 9177
RegExp: 910
Splay: 1195

BENCHMARK 3 : Kraken 1.1

Per par condicio ho lanciato anche Kraken, benchmark minimale di casa Mozilla. Tuttavia anche Kraken va contro la sua stessa creatura. La differenza è meno marcata (106%) ma comunque sostanziosa. In pratica Firefox ci mette il doppio del tempo del concorrente a terminare il benchmark.

TEST                         COMPARISON            FROM                 TO               DETAILS

====================================================================================

** TOTAL **:                 2.06x as fast     17426.2ms +/- 1.6%   8456.6ms +/- 1.2%     significant

====================================================================================

  ai:                        9.85x as fast      5491.4ms +/- 4.5%    557.6ms +/- 4.8%     significant
    astar:                   9.85x as fast      5491.4ms +/- 4.5%    557.6ms +/- 4.8%     significant

  audio:                     1.74x as fast      4684.1ms +/- 1.0%   2697.0ms +/- 1.8%     significant
    beat-detection:          1.34x as fast      1123.9ms +/- 0.7%    839.7ms +/- 2.6%     significant
    dft:                     1.54x as fast      1409.8ms +/- 2.5%    913.2ms +/- 1.4%     significant
    fft:                     1.64x as fast       880.6ms +/- 0.7%    537.4ms +/- 3.3%     significant
    oscillator:              3.12x as fast      1269.8ms +/- 2.1%    406.7ms +/- 2.2%     significant

  imaging:                   1.45x as fast      4511.9ms +/- 1.6%   3111.2ms +/- 2.5%     significant
    gaussian-blur:           2.46x as fast      1748.3ms +/- 1.8%    711.0ms +/- 2.5%     significant
    darkroom:                *1.36x as slow*     827.2ms +/- 0.5%   1121.2ms +/- 1.8%     significant
    desaturate:              1.51x as fast      1936.4ms +/- 3.7%   1279.0ms +/- 5.9%     significant

  json:                      1.039x as fast      495.2ms +/- 0.2%    476.8ms +/- 2.0%     significant
    parse-financial:         *1.037x as slow*    283.6ms +/- 0.2%    294.2ms +/- 3.2%     significant
    stringify-tinderbox:     1.159x as fast      211.6ms +/- 0.3%    182.6ms +/- 0.7%     significant

  stanford:                  1.39x as fast      2243.6ms +/- 1.4%   1614.0ms +/- 0.4%     significant
    crypto-aes:              1.44x as fast       625.4ms +/- 5.1%    435.1ms +/- 0.8%     significant
    crypto-ccm:              1.058x as fast      461.2ms +/- 1.8%    435.8ms +/- 0.8%     significant
    crypto-pbkdf2:           1.69x as fast       809.2ms +/- 0.8%    477.7ms +/- 1.1%     significant
    crypto-sha256-iterative: 1.31x as fast       347.8ms +/- 0.9%    265.4ms +/- 1.5%     significant

BENCHMARK 4 : Dromaeo

Per finire ecco il risultato del benchmark javascript più completo che conosco: Dromaeo. Sempre di casa Mozilla ma è chiaro, verificabile e il codice del benchmark è disponibile a chiunque voglia controllarlo.

Risultati Firefox = 132.72runs/s

Risultati Chrome = 238.36runs/s

Potete controllare i dettagli cliccando sui link.

Chrome è più performante del 79.6% rispetto a Firefox.

CONCLUSIONE

Questa sfida è terminata 3-1 per il browser di Google e quel punto di Firefox è strappato per un soffio. Insomma, Chrome si classifica, come da pronostico, estremamente più veloce di Firefox nell’esecuzione del JavaScript. Tenendo però conto della velocità con cui questi Browser si riproducono non ci resta che aspettare qualche mese per vedere come evolverà questa appassionante sfida.