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)
- y = Math.abs(x);
- y = (x^(x>>31))-(x>>31);
- y = x<0?-x:x;
| FF2.0 | IE7.0 | Op9.25 |
1 | 1538 | 1928 | 1443 |
2 | 1475 | 1072 | 1456 |
3 | 1131 | 956 | 1106 |
Truncar
- y = Math.floor(x); (Nota: Redondeará hacia abajo los valores negativos.)
- y = x|0;
- y = x>>0;
| FF2.0 | IE7.0 | Op9.25 |
1 | 1544 | 2000 | 1543 |
2 | 1212 | 875 | 922 |
3 | 1191 | 850 | 922 |
Bucles For
- for(var iter=1; iter
- for(var iter=times-1; iter>0; iter--){ }
- for(var iter=times; --iter>=0;){ }
| FF2.0 | IE7.0 | Op9.25 |
1 | 857 | 631 | 784 |
2 | 547 | 369 | 459 |
3 | 384 | 222 | 334 |
Llamadas a funciones
- x = function(){ ... }
- x = setx(); function setx(){ ... }
| FF2.0 | IE7.0 | Op9.25 |
1 | 750 | 2403 | 1522 |
2 | 865 | 2653 | 1141 |
Intercambiar valores
- var hold=x; x=y; y=hold;
- x^=y; y^=x; x^=y;
| FF2.0 | IE7.0 | Op9.25 |
1 | 1546 | 1206 | 1309 |
2 | 2079 | 1290 | 1900 |
Vía
Hullbreach.