Contenido

for reverso para grandes interaciones en Javascript

28 may

+ 20

Luigi, me muestra hoy un artículo muy interesante sobre optimización de Javascript. En él encontramos un ejemplo de como mejorar nuestras iteraciones en nuestro código. Simplemente debemos pensar en decrementar la variable que estamos iterando. He montado un pequeño ejemplo para testear 50.000, 500.000 y 5.000.000 de iteraciones simples. Los resultados hablan por si solos:

[increment]50.000 iteraciones: 11ms. (50000)
[decrement]50.000 iteraciones: 2ms. (50000)
[increment]500.000 iteraciones: 115ms. (500000)
[decrement]500.000 iteraciones: 19ms. (500000)
[increment]5.000.000 iteraciones: 1188ms. (5000000)
[decrement]5.000.000 iteraciones: 181ms. (5000000)

Funciones

El código del ejemplo es muy sencillo y como se puede ver, únicamente se encarga de incrementar la variable y, en ambas.

	var fors = {
		increment: function(iterations){
				var y = 0;
				for (var i=0;i<iterations;i++){
					y++;
				}
				return y;
		},
		decrement:function (iterations){
			var y = 0;
			for (var i=iterations;i>0;i--){
				y++;
			}
			return y;
		}
	}

Como podemos ver, un pequeño cambio puede significar reducir entre un 200 y un 600% el tiempo de procesamiento de nuestros scripts. ¿Alguna optimización más?

Explicación

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 comparala con 0, nos ahorramos dicha consulta.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.