2012-12-19 23 views
7

Alla ricerca di modi per optomize il mio codice, mi è successo su this jsPerf test. Non aspettandomi altro che riaffermare la mia idea della lentezza delle chiamate di funzione, i miei risultati con IE 9 mi hanno davvero buttato per un giro. Il codice che utilizzava le chiamate di funzione era più veloce, ma solo su questo unico browser. L'ho eseguito più volte con lo stesso risultato. Non riesco a vedere che il test sia stato impostato in modo errato. Cosa potrebbe causare questo strano risultato?IE funziona più velocemente con le chiamate di funzione?

mio user agent è Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0 in esecuzione su Windows Server 2008.

+0

Dispari, IE 10 non lo fa neanche. – vcsjones

+0

Ho appena confermato che è solo una cosa di IE 9. Provato di nuovo su un altro computer. –

+1

Il processo di tabulazione era 32 bit o 64 bit? Il debugging degli script era abilitato o disabilitato? C'è una differenza se usi mai il * risultato * del test (ad esempio impedendo di ottimizzare l'intera cosa) – EricLaw

risposta

4

Disclaimer: Sono il creatore di jsPerf.com.


il primo test è la seguente:

var i = 0; 
for (i = 0; i < 1000; i++) { 
    test() 
} 

Perché comprendono il ciclo for lì? Danneggia solo il risultato. jsPerf ripete automaticamente il codice di test fino a quando ha eseguito abbastanza test per ottenere un risultato statisticamente significativo. Idealmente, i test di jsPerf sono quanto più compatti possibile e testano solo ciò che si desidera veramente testare. In questo caso, non ti interessa affatto le prestazioni del ciclo for - vuoi solo scoprire se il codice di allineamento è più veloce di chiamare una funzione o meno.

Se sei interessato ad altri suggerimenti sulla creazione di robusti casi di test jsPerf, check out my #jsconfeu2011 presentation.

Nota: non sto dicendo che il ciclo ridondante for è la ragione per cui si sta vedendo questo risultato. Potrebbe essere un fattore, ma potrebbe esserci qualcos'altro che distorce ulteriormente il risultato. This might be IE9’s “dead code removal” feature kicking in.

In ogni caso, ho biforcato il test jsPerf, rimosso i loop e reso globali le variabili nel tentativo di evitare ottimizzazioni dell'eliminazione dei codici morti. http://jsperf.com/function-calls-vs-inline/3 Potresti provare questo in IE9? Al momento non ho una macchina virtuale IE9.

+0

Al momento non ho accesso alla mia macchina con IE9, ma forse ancora più stranamente, Chrome ora funziona più velocemente anche con le chiamate di funzione. –

+0

@TreyKeown: Interessante, posso riprodurre i risultati in Chrome 28, ma non in Chrome 30 Canary. Potrebbe essere stato un caso nella versione v8 fornita con Chrome 28. Qualcosa di simile è successo qualche tempo fa - ad un certo punto, l'esecuzione di una ricerca dell'ambito era più veloce di _non_ che eseguiva una ricerca dell'ambito in v8: http://jsperf.com/ scope-lookups –

Problemi correlati