martes, febrero 19, 2008

Test de optimización de JavaScript

Caminos hacia Roma hay muchos... Pero ¿Cual tomar?

Resulta que he encontrado estas pruebas de eficiencia de código en javascript y me han resultado bastante interesantes. (No tenía ni idea que la forma más tonta de hacer el valor absoluto de un entero fuera la más eficiente.)

Los siguientes test han sido realizados haciendo 1.000.000 iteraciones y mostrando el tiempo en milisegundos, con una media de 5 veces. Algunos resultados son obvios, mientras que otros son sorprendentes. Estos tests pueden ser utilizados como guías para código optimizado.

Valor absoluto (Entero)

  1. y = Math.abs(x);
  2. y = (x^(x>>31))-(x>>31);
  3. y = x<0?-x:x;

FF2.0IE7.0Op9.25
1153819281443
2147510721456
311319561106

Truncar

  1. y = Math.floor(x); (Nota: Redondeará hacia abajo los valores negativos.)
  2. y = x|0;
  3. y = x>>0;

FF2.0IE7.0Op9.25
1154420001543
21212875922
31191850922

Bucles For

  1. for(var iter=1; iter
  2. for(var iter=times-1; iter>0; iter--){ }
  3. for(var iter=times; --iter>=0;){ }

FF2.0IE7.0Op9.25
1857631784
2547369459
3384222334

Llamadas a funciones

  1. x = function(){ ... }
  2. x = setx(); function setx(){ ... }

FF2.0IE7.0Op9.25
175024031522
286526531141

Intercambiar valores

  1. var hold=x; x=y; y=hold;
  2. x^=y; y^=x; x^=y;

FF2.0IE7.0Op9.25
1154612061309
2207912901900


Vía Hullbreach.

No hay comentarios:

Publicar un comentario