我正在考虑对3个主要浏览器进行基准测试,以了解他们使用相当简单的代码运行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和Chrome上约为30毫秒,而在IE和Chrome上大约需要30毫秒),并且IE和Chrome的运行时间没有同样减少。
对于Firefox冗长的运行时间以及迭代IE和Chrome所需的时间减少有什么解释?
我使用的是IE9,Firefox 32.0.1和Chrome 37.0.2062.120。
答案 0 :(得分:2)
它可能与重置调用堆栈和缓存有关。这是关于调用堆栈在javascript中工作方式的interesting talk。 link给@Yiving的答案@Jiving在评论中给出的问题也非常有用。
如果要测量纯加速时间,则在Web worker中运行它可能是可行的。我将您的脚本移到了它,请参阅this 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)
防止污染全球范围。