2012-09-14 16 views
7

Una pregunta rápida solamente. Creé el punto de referencia (enlace a continuación), y para mí al menos (ejecutando Chrome 18.0.1025), leer valores desde el frente de un array usando array.shift() cada vez parece notablemente más rápido que leer los valores usando un while/para bucle y acceder a ellos por índice.Javascript: ¿Por qué este benchmark muestra que array.shift() es mucho más rápido que array [i] al leer valores de un array?

Estoy seguro de que esto no puede ser correcto, ya que shift() tiene mucho más trabajo que hacer, pero al mismo tiempo no veo qué podría haber hecho mal para explicar esta diferencia tan extrema.

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

Gracias por leer, James

Respuesta

7

Usted está configurando su conjunto sólo una vez por prueba, y por lo tanto sólo la primera iteración de la prueba shift tiene ningún dato para trabajar. Las siguientes iteraciones tienen una matriz vacía a la izquierda de la primera iteración y terminan inmediatamente.

Here is the fixed test suite, donde los algoritmos de mutación funcionan en una copia de los datos. El algoritmo shift es previsiblemente el último en rendimiento.

+1

Para ser justos, debe copiar la matriz para aquellos que usan el índice también. – kennytm

+0

cierto. El conjunto de pruebas se actualiza, 'shift' todavía ocupa el último lugar. – lanzz

+0

Gracias, esa fue mi sospecha inicial. Tenía la impresión de que el código de configuración se ejecutaba antes de cada iteración, en lugar de justo antes de cada prueba :) – jsdw

Cuestiones relacionadas