La lunghezza di un array effettivo non viene calcolata al volo. È memorizzato come parte della struttura dei dati dell'array, quindi l'accesso non richiede più lavoro rispetto al semplice recupero del valore (non c'è computazione). In quanto tale, generalmente sarà veloce quanto recuperare qualsiasi proprietà fissa di un oggetto. Come si può vedere in questo test le prestazioni, non v'è praticamente alcuna differenza tra il recupero della lunghezza di un array e il recupero di una proprietà di un oggetto:
http://jsperf.com/length-comparisons
Un'eccezione a questa è oggetti NodeList che i DOM rendimenti da funzioni come getElementsByTagName()
o getElementsByClassName()
. In questi, è spesso molto più lento accedere alla proprietà length. Ciò è probabilmente dovuto al fatto che questi oggetti nodeList non sono veri oggetti javascript e potrebbe esserci un ponte tra Javascript e codice nativo che deve essere attraversato ogni volta che si accede a qualcosa da questi oggetti. In questo caso, sarebbe molto più veloce (10-100 volte più veloce) memorizzare la lunghezza in una variabile locale piuttosto che utilizzarla ripetutamente in un loop al di fuori della lista dei nodi. L'ho aggiunto al confronto della lunghezza e puoi vedere quanto è più lento.
In alcuni browser, è significativamente più veloce inserire la lunghezza in una variabile locale e utilizzarla da lì se ci si riferisce a essa più e più volte (come in un ciclo). Ecco il grafico delle prestazioni dal test jsperf sopra:
Non c'è 'length' ** ** metodo a built-in javascript oggetti, ma l'accesso ai beni oggetto è spesso più lento di accesso variabile locale. – kirilloid
Se la differenza tra la pagina che si comporta male e l'esecuzione accettabile sono alcuni riferimenti a ".length" su istanze di array, allora hai sicuramente alcuni problemi molto più importanti da risolvere. – Pointy
Perchè @Pointly? Non posso cercare ogni miglioramento nel mio codice? Non posso essere solo curioso? – santiagobasulto