Stavo cercando di confrontare il guadagno/perdita di "caching" matematico, nella speranza che potessi effettuare chiamate più velocemente.Le variabili locali richiedono 7 volte più tempo di accesso rispetto alle variabili globali?
Qui è stato il test:
<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>
I miei risultati del test:
[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 è casuale, naturalmente, ma per la maggior parte
In tutti i casi [ questo mostra il tempo impiegato]:
[richiede più tempo] mathfloor> Math.floor> window.mathfloor [è più veloce]
Perché è questo? Nei miei progetti ho utilizzato var mfloor = Math.floor
e, secondo i miei benchmark non così straordinari, i miei sforzi per "ottimizzare" in realtà rallentavano lo script di ALOT ...
C'è qualche altro modo per rendere il mio codice più efficiente"...? Sono al punto in cui ho fondamentalmente bisogno di ottimizzare, quindi no, questa non è "ottimizzazione prematura" ...
Potrei leggere male, ma le etichette di testo sembrano riferirsi alle cose sbagliate. Sembra come dovrebbero essere: Math.floor: ms
window.mathfloor: ms
var mathfloor: ms
– Joe