我试图以“缓存”math.floor的收益/损失为基准,希望能够更快地打电话。局部变量比全局变量要长7倍?
这里是测试:
<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>
我的成绩从测试:
[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
的变化是随机的,当然,但在大多数情况下
在所有情况下[这显示所花费的时间]:
[耗时更长] mathfloor> Math.floor> window.mathfloor [更快]
这是为什么?在我的项目中,我一直在使用var mfloor = Math.floor
,并根据我不那么惊人的基准,我的“优化”的努力实际上减慢了ALOT的脚本...
是否有任何其他方式可以让我的代码更高效”...?我在这个阶段,我基本上需要优化,所以不,这不是“不成熟的优化”...
我可能会读这个错误,但是您的文本标签看起来像是指的是错误的东西。看起来他们应该是: Math.floor:<跨度ID = “MathResult”>毫秒
window.mathfloor:<跨度ID = “globalResult”>毫秒
变种mathfloor:<跨度ID = “localResult”> ms
– Joe 2010-04-20 22:09:22