J'essayais de comparer le gain/la perte de «cache» math.floor, dans l'espoir que je pourrais faire des appels plus rapidement.Les variables locales prennent 7x plus de temps pour accéder que les variables globales?
Voici était le 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>
Mes résultats de l'essai:
[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 variance est aléatoire, bien sûr, mais pour la plupart
Dans tous les cas [ cela montre le temps pris]:
[prend plus de temps] mathfloor> Math.floor> window.mathfloor [est plus rapide]
Pourquoi est-ce? Dans mes projets, j'ai utilisé var mfloor = Math.floor
, et selon mes benchmarks pas si étonnants, mes efforts pour "optimiser" ralenti réellement le script par ALOT ...
Y at-il une autre façon de faire mon code plus efficace"...? Je suis à l'étape où j'ai fondamentalement besoin d'optimiser, donc non, ce n'est pas "l'optimisation prématurée" ...
Je suis peut-être en train de lire ce qui ne va pas, mais vos étiquettes de texte ont l'air de faire référence à de mauvaises choses. On dirait qu'ils devraient être: Math.floor: ms
window.mathfloor: ms
var mathfloor: ms
– Joe