Estaba tratando de comparar la ganancia/pérdida de "caching" math.floor, con la esperanza de poder hacer las llamadas más rápido.Las variables locales tardan 7 veces más en acceder que las variables globales?
Aquí era la prueba:
<html>
<head>
<script>
window.onload = function()
{
var startTime = new Date().getTime();
var k = 0;
for(var i = 0; i < 1000000; i++) k += Math.floor(9.99);
var mathFloorTime = new Date().getTime() - startTime;
startTime = new Date().getTime();
window.mfloor = Math.floor;
k = 0;
for(var i = 0; i < 1000000; i++) k += window.mfloor(9.99);
var globalFloorTime = new Date().getTime() - startTime;
startTime = new Date().getTime();
var mfloor = Math.floor;
k = 0;
for(var i = 0; i < 1000000; i++) k += mfloor(9.99);
var localFloorTime = new Date().getTime() - startTime;
document.getElementById("MathResult").innerHTML = mathFloorTime;
document.getElementById("globalResult").innerHTML = globalFloorTime;
document.getElementById("localResult").innerHTML = localFloorTime;
};
</script>
</head>
<body>
Math.floor: <span id="MathResult"></span>ms <br />
var mathfloor: <span id="globalResult"></span>ms <br />
window.mathfloor: <span id="localResult"></span>ms <br />
</body>
</html>
Mis resultados de la prueba:
[Chromium 5.0.308.0]:
Math.floor: 49ms
var mathfloor: 271ms
window.mathfloor: 40ms
[IE 8.0.6001.18702]
Math.floor: 703ms
var mathfloor: 9890ms [LOL!]
window.mathfloor: 375ms
[Firefox [Minefield] 3.7a4pre]
Math.floor: 42ms
var mathfloor: 2257ms
window.mathfloor: 60ms
[Safari 4.0.4[531.21.10] ]
Math.floor: 92ms
var mathfloor: 289ms
window.mathfloor: 90ms
[Opera 10.10 build 1893]
Math.floor: 500ms
var mathfloor: 843ms
window.mathfloor: 360ms
[Konqueror 4.3.90 [KDE 4.3.90 [KDE 4.4 RC1]]]
Math.floor: 453ms
var mathfloor: 563ms
window.mathfloor: 312ms
La varianza es al azar, por supuesto, pero en su mayor parte
En todos los casos [ esto muestra el tiempo tomado]:
[lleva más tiempo] mathfloor> Math.floor> window.mathfloor [es más rápido]
¿Por qué es esto? En mis proyectos he estado usando var mfloor = Math.floor
, y de acuerdo con mis puntos de referencia no tan sorprendentes, mis esfuerzos para "optimizar" en realidad desaceleró la secuencia de comandos por ALOT ...
¿Hay alguna otra forma de hacer que mi código más eficiente"...? Estoy en la etapa en la que básicamente necesito optimizar, así que no, esto no es una "optimización prematura" ...
Quizás esté leyendo esto mal, pero las etiquetas de texto parecen estar refiriéndose a cosas equivocadas. Parece que deben ser: Math.floor: ms
window.mathfloor: ms
var mathfloor: ms
– Joe