Suponiendo que while(true) se romperá al mismo tiempo que el bucle for(...) , ¿por qué for(...) es más rápido?
Según jsbench , es aproximadamente un 7% más lento usar while(true)
Aquí está el código que he usado en jsbench:
Usando un bucle while(true)
/* generate array */ const arr = [] for(let i = 0; i < 1000; i++){ arr.push(i) } let i = 0 while(true){ if(arr[i] >= 900){ return; } i++ } usando un bucle for(...) :
/* generate array */ const arr = [] for(let i = 0; i < 1000; i++){ arr.push(i) } for(let i = 0; i < arr.length; i++){ if(arr[i] >= 900){ return; } }El tiempo tiene que ver tanto con su código como con la forma en que se compila JavaScript. Sin embargo, las diferencias son bastante intrascendentes en este ejemplo, por lo que probar cuál es más rápido varía cada vez que se ejecuta el código y los resultados son bastante indeterminados. En general, deberían tomar aproximadamente el mismo tiempo o un poco más rápido o más lento.
Tu codigo
Su ciclo while continuará simplemente porque tiene la condición establecida para que siempre sea true . No incluyó una condición para verificar si debe detenerse en algún punto después de completar cada iteración.
Su ciclo for , por otro lado, tiene una condición que se verifica cada vez que se completa una iteración (comprobando si i < arr.length todavía).
Aparte de eso, su código es más o menos el mismo. Ambos tienen el mismo bloque de código, la diferencia es que el ciclo while incrementa i dentro de su bloque de código, en lugar del ciclo for que incrementa i después de su bloque de código interno.
Las diferencias en este caso son bastante intrascendentes.
Compilacion
Si alguna vez ha estudiado algo de código ensamblador, debería estar un poco familiarizado con algunas de las estructuras para bucles.
Dependiendo de cómo se compile el código, se determina qué operaciones/instrucciones se ejecutan y en qué orden. Además, la estructura de un ciclo while generalmente debe ser diferente de un ciclo for en ensamblador, lo que significa que puede haber una instrucción adicional para ejecutar en un ciclo for versus un ciclo while o viceversa, según el lenguaje de programación.