2011-08-14 18 views
7

Recientemente tuve la oportunidad de hacer bucles en javascript y estaba bastante confundido acerca de si usar o no para el ciclo o instrucción while.¿Qué es más eficiente en Javascript: while o for statements?

var i = foo.length; 
while(i--){ 

} 

o

for(var i=0 ;i<=foo.length;i++){ 

} 

quiero saber de los chicos javascript cuál es más eficiente de utilizar y en qué circunstancias debemos utilizarlos en consecuencia. ¿Es la misma razón que en Java o algo diferente?

+0

no sé que uno podría ser más eficiente que el otro ya que cada uno implica el mismo número de asignaciones y comparaciones. Para la legibilidad, iría con el ciclo 'for', pero esa es una preferencia personal. – Ryan

+7

Puede probarlo usted mismo en http://jsperf.com/for-vs-while-loop-iterating. – pimvdb

+0

No es una cuestión de eficiencia, es una cuestión de preferencia y legibilidad. No hay diferencia práctica como muestra la prueba de @ pimvdb. – JJJ

Respuesta

9

En teoría el bucle while es más rápido porque el bucle for busca el atributo length de foo cada vez que a través del lazo, pero en el mundo real el uso que va a hacer una pequeña diferencia inconmensurable.

+0

esto es cierto para este ejemplo particular, donde las declaraciones están haciendo cosas diferentes, para (i = foo.length; i> 0; i--) no buscaría el atributo de longitud de foo en cada iteración, pero eso es una operación O (1) de todos modos – guigouz

4

For-Loops son azúcar sintáctico para ciclos while. Deberían ser exactamente lo mismo.

Sus dos bucles, sin embargo, son semánticamente diferentes. Uno cuenta a cero, mientras que el otro cuenta para una propiedad de un objeto, que será necesariamente más lenta, aunque ligeramente. Sería más significativo para comparar el anterior bucle while con el siguiente ciclo for:

for (var i = foo.length; i--;) { } 
4

En realidad, no tiene ninguna diferencia significativa bucle que utiliza. cada libro que he leído lo dice. puede haber una diferencia en su ejemplo porque está usando un bucle decremental en su ciclo while. tiende a ser más rápido porque se evalúa la única condición.

por ejemplo while(i<100) es más lento que while(i--)

para su bucle for puede almacenar la longitud antes del bucle y el trabajo en ese valor en lugar de recuperar todo el tiempo. también le dará una optimización del rendimiento.

var fooLength = foo.length; 
for(var i=0 ;i<= fooLength;i++){ 

} 
+0

Incluso podrías hacerlo en la primera parte de for(). para (var i = 0, arrLength = arr.length; i

7

En algunos navegadores algunas formas de bucle son más rápidos - por ejemplo, en Chrome, el bucle for es más de dos veces más rápido, pero no hay un ganador consistente a través de todos los navegadores. Si encuentra un truco para hacerlo realmente rápido en un navegador, será castigado en otro navegador.

prueba de rendimiento real en diferentes navegadores: http://jsperf.com/for-or-while

Debe utilizar el tipo de bucle que tenga sentido para la situación. En muchos casos, lo que haces dentro del ciclo lleva mucho más tiempo que el ciclo en sí.

0

No hay mucha diferencia en su "eficiencia" o rendimiento, use lo que haga que la lógica de su programa sea más comprensible caso por caso.

Cuestiones relacionadas