UPDATE:
Un sacco di vecchi trucchi di queste risposte sono grandi per interpretare JS nei browser più vecchi.
In qualsiasi implementazione JS moderna compresi tutti i browser moderni, il nodo e le ultime visualizzazioni Web mobili, le funzioni inline possono essere memorizzate nella cache dal compilatore JIT (JS), rendendo in genere un'opzione molto più veloce per l'iterazione di array. Un tempo era l'opposto in cui solo effettuare chiamate a una funzione richiedeva ripetutamente un processo di build-up/teardown che poteva seriamente ridurre le prestazioni di un ciclo non banale.
Per prestazioni ottimali eviterei di fare riferimento a qualcosa che non è stato passato come argomento o definito all'interno della funzione stessa se non è necessario. Non sono sicuro al 100% che importi, ma potrei capire perché potrebbe.
I valori Getter che implicano qualsiasi tipo di processo di ricerca come le lunghezze degli array o le proprietà del nodo DOM sono probabilmente anche meglio conservati nella cache di una variabile.
Ma oltre a questo, proverei semplicemente a lasciare che il principio di base dell'elusione del lavoro guidi i tuoi sforzi perfetti. Pre-calcolare cose che non devono essere ricalcolate in un ciclo, o memorizzare in cache un risultato del selettore di query su var piuttosto che frugare nel DOM ripetutamente sono buoni esempi di questo. Trattare troppo duramente per trarre vantaggio dal comportamento JIT probabilmente diventerà piuttosto arcano e probabilmente non durerà nel tempo o attraverso tutte le JIT.
RISPOSTA VECCHIO:
Okay, dimentica muro di testo. punti elenco:
var i = someArray.length; //length is cached
someArray.reverse(); //include this only if iterating in 0-(length-1) order is important
while(i--){
//run a test statement on someArray[i];
}
lunghezza viene memorizzata nella cache e immediatamente reso nell'indice
Il vantaggio di iterazione all'indietro JS AFAIK è di evitare un operatore logico con due operandi. In questo caso stiamo solo valutando un numero. È vero o è zero e falso.
Lo trovo anche elegante.
fonte
2012-04-02 19:02:29
'forEach' probabilmente ha alcune ottimizzazioni native o qualcosa del genere. –
Inoltre, non stai nemmeno ricevendo il valore dall'array nel Test Case 1, stai loggando i invece di 'array [i]' –
1) non devi creare l'array su ogni test, puoi definire vars che saranno accessibili su tutti i test 2) stai controllando '.length' ogni ciclo – ajax333221