我正在研究对三种主要浏览器进行基准测试,了解它们使用一段相当琐碎的代码运行JavaScript的速度。我的JS是:
<!DOCTYPE html>
<html>
<body>
<h1>JS Test page</h1>
<p>The button below will test the speeed of your browser</p>
<button onClick="testBrowser()">Test browser</button>
<p id="TimeArrayP"></p>
<script>
function testBrowser() {
var timeArray = new Array();
for (i = 0; i < 100; ++i) {
var start = new Date().getTime();
var number1;
var number2;
var number3;
var number4;
var result1;
var result2;
var result3;
var endresult;
for (e = 0; e < 50000; ++e) {
number1 = Math.floor((Math.random() * 100) + 1);
number2 = Math.floor((Math.random() * 100) + 7);
result1 = ((number1 + number2 / number1 * number2) * (number3 + number2) / number1);
result2 = ((number2 + number3 / number1 * number4) * (number3 + number1) / number4);
result3 = ((number3 + number4 / number4 * number2) * (number2 + number3) / number2);
endresult = ((result1 * result2 * result3) / (result1 + result2 * result3) + result1 / result2);
}
var end = new Date().getTime();
var time = end - start;
timeArray[i] = time;
}
timeArray.toString();
document.getElementById("TimeArrayP").innerHTML = timeArray;
}
</script>
</body>
</html>
在Chrome和IE上,运行时间的开始时间比结束时间高,每次运行超过第二次都是相当一致的时间,并且低于第一次。
然而,Firefox运行此代码的时间要长得多(在Firefox上大约需要180毫秒,而在IE和Chrome上大约需要30毫秒),并且运行时间没有像IE和Chrome那样减少。
对于Firefox漫长的运行时间,以及迭代IE和Chrome所需时间的减少,有什么解释?
我使用的是IE9、Firefox 32.0.1和Chrome 37.0.2062.120。
这可能与重置调用堆栈和缓存有关。下面是一个关于javascript中调用堆栈工作方式的有趣讨论。Jiving在你的问题评论中给出的SO答案的链接也非常有用。
如果你想测量纯计算时间,在网络工作者中运行它可能是可行的。我已经将您的脚本移到它上面了,请参阅jsFiddle。
此外,更换
for (i = 0; i < 100; ++i) // and
for (e = 0; e < 50000; ++e)
进入
for (var i = 0; i < 100; ++i) //and
for (var e = 0; e < 50000; ++e)
以防止污染全球范围。