Hace unas semanas, escuché que declarar la variable de condición true / false fuera del bucle era más rápido. Entonces, quería probarlo.
Entonces, básicamente, hice este código para ver cuál es más rápido.
Estos son los dos bucles.
// Initialization const arr = [1, 2, 3, 4, 5]; // Bad Loop console.time("bad"); for (let i = 0; i < arr.length; i++) { console.log(arr[i]); } console.timeEnd("bad"); // Good Loop console.time("good"); let l = arr.length; for (let i = 0; i < l; i++) { console.log(arr[i]); } console.timeEnd("good");Cuando se ejecuta el código, hay una diferencia significativa en el tiempo que se tarda en ejecutar el bucle incorrecto, en comparación con el tiempo que se tarda en ejecutar el bucle bueno. (No importa cuán rápido sea el ciclo malo, el ciclo bueno siempre es más rápido).
Entonces, mi pregunta es ¿por qué sucede esto ? La única diferencia entre los dos bucles es el hecho de que el bucle bueno define la longitud de la matriz antes de que comience el bucle, mientras que el bucle malo lo introduce en el bucle.
Básicamente, esta es la razón por la cual el código en el bucle malo es más lento que en el bucle bueno.
1. ¿Por qué el bucle malo es lento?
Primero, echemos un vistazo al bucle malo.
const arr = [1, 2, 3, 4, 5]; console.time("Bad"); for (let i = 0; i < arr.length; i++) { console.log(arr[i]); } console.timeEnd("Bad"); Lo que hace que este bucle sea lento es el hecho de que accede a la propiedad length para cada iteración .
Esto puede disminuir drásticamente el rendimiento, ya que por cinco veces (en este caso), tiene que acceder a una propiedad.
Como puede ver, no sorprende que el bucle malo sea más lento.
2. ¿Por qué el bucle bueno es tan rápido?
Echa un vistazo al bucle bueno:
const arr = [1, 2, 3, 4, 5]; console.time("Good"); let l = arr.length; for (let i = 0; i < l; i++) { console.log(arr[i]); } console.timeEnd("Good"); Puede ver que la razón por la que es más rápido es porque accede a la length fuera del bucle . En otras palabras, solo accede a la length una vez, en comparación con el código incorrecto, que accede cinco veces.
Puede ver que al definir la variable, reduce el tiempo necesario para obtener la propiedad de length desde el principio, ¡lo que aumenta el rendimiento!
En conclusión, el ciclo bueno es más rápido ya que solo tiene que acceder a la propiedad de length una vez.