Javascript: Prečo tento benchmark ukazuje, že array.shift() je oveľa rýchlejšie než array[i] pri čítaní hodnôt z poľa?


Len rýchla otázka. Vytvoril som benchmark (odkaz nižšie) a pre mňa aspoň (pri používaní Chrome 18.0.1025) sa zdá, že čítanie hodnôt z prednej časti poľa pomocou array.shift() každý raz je veľmi rýchlejšie ako čítanie hodnôt pomocou while/for slučky a prístupu k nim cez index.

Som si istý, že toto nemôže byť správne, pretože shift() má oveľa viac práce, ale zároveň nevidím, čo som mohol urobiť zle, aby sa vysvetlil tento pomerne extrémny rozdiel?

http://jsperf.com/some-array-reading-comparisons

Ďakujem za prečítanie, James

Odpoveď č. 1

Nastavujete svoje pole iba raz na test, a preto má iba prvá iterácia testu shift nejaké údaje, s ktorými môže pracovať. Nasledujúce iterácie majú prázdne pole zostávajúce z prvej iterácie a okamžite sa ukončia.

Tu je opravená testovacia sada, kde mutujúce algoritmy pracujú na kópii dát. Algoritmus shift predvídateľne skončí ako posledný z hľadiska výkonu.