Interacciones en php

Hoy he leído un artículo muy interesante en anieto2k con el título for reverso para grandes interacciones en javascript y me ha llamado mucho la atención la premisa y el resultado de este test que demuestra como puede afectar poner en un for una variable para comparar el recorrido de la variable, o sea que no es lo mismo for (var i=0;i<iterations;i++) que for (var i=iterations;i>0;i—)

Con tiempos en javascript asombrosos, por ejemplo para 50 mil repeticiones el primer ciclo tardaría 11 ms pero el segundo solo 2 ms y esto explicado muy brillantemente y cito:

El motivo de esta diferencia de tiempo, es debido a que increment() debe realizar una revisión del valor de iterations por cada pasada por el bucle. De esta forma, se realiza un acceso a memoria para solicitar el valor de la variable, algo que no pasa en decrement() que al compárala con 0, nos ahorramos dicha consulta.

Y me he planteado como sería hacer esto en javascript y además de que en vez de una variable fuera una función y los resultados son impresionantes llegándose a reducir el tiempo de un script en hasta un 80 % en el caso de una función personalizada. Los ejemplos son los siguiente:

Para el clásico for ($i=0;$i<$iteracciones;$i++) dónde $iteracciones = ‘50000’ o sea un número exacto se puede ahorrar entre un 2 y un 11 % del tiempo según la carga del server. En cambio si seguimos comparando con $iteracciones pero en vez de asignar esta a un número la asignamos por ejemplo $iteracciones = count($array) donde array contiene 550 elementos el ahorro puede llegar hasta el 13 %, no sé porque la diferencia supongo que se pueda achacar a carga del server o si a alguien se le ocurre otra idea, pero a mi particularmente no se me ocurre el porque.

Ya si utilizamos for ($i=0;$i<count($array);$i++) damos un salto de ahorro de entre un 62 y un 65 % del tiempo y ya si utilizamos una función propia pues será en tiempo que demore en ejecutarse la misma las n veces, por ello es que no es nunca recomendable utilizar funciones como método de comprobación de un for.

En fin seguiré reportando frikeses a medida que las vaya encontrando.

Comentarios