我正在Firefox,Chrome和Safari下对以下JavaScript代码片段进行性能测试
var f = function(x) {
return Math.sin(x);
}
function testSpeed() {
console.log("test started, please hold on...");
var time = Date.now();
for(var i = 0; i < 1000; i ++) {
for(var x = 1; x < 200000; x ++) {
f(x);//replace by Math.sin(x) here
}
}
console.log("total time = " + ((Date.now() - time) / 1000.0));
}
testSpeed();
f(x)
调用替换为Math.sin(x)
时相同。f(x)
调用替换为Math.sin(x)
时相同。f(x)
调用替换为Math.sin(x)
时,只有0.56秒。此外,在Safari下,为什么直接调用
Math.sin(x)
与f(x)
的调用相比会有巨大的差异(约快13倍)?
f(x)
的调用或者删除f
函数的主体时,速度会是多少?由于它没有任何影响,引擎可以合理地将其消除。 - Ry-Math.sin
是纯函数,并在直接使用它时执行相同的优化,但在这种情况下没有扩展到f
。Chrome可能会认识到你正在尝试进行基准测试,并避免在基准测试函数中消除死代码,但这只是一个猜测。 - Ry-Math.sin(x)
代替函数调用进行测试。奇怪的是,Chrome显示0.186秒,而Firefox则显示41.253秒。 但是,如果我将Math.sin(x)
更改为let a=12;let b=423;let c=a+b
,Chrome只需要0.179秒,而Firefox需要0.258秒。 另一方面,如果我测试从DOM读取(document.getElementsByClassName('round')[0].click()
),Firefox在这种情况下执行速度比较快,快35%。我的CPU是Q6600,我正在使用Windows 7 64位。我想知道其他人是否有类似的结果。 - teg_brightly