在寻找使我的代码无效的方法时,我碰巧遇到了this jsPerf test。除了重新确认我的函数调用缓慢性的概念外,我没有想到其他任何事情,但是我在IE 9中的结果确实让我陷入了循环。利用函数调用的代码更快,但仅在这种浏览器上。我多次运行,结果相同。我看不到测试设置不正确。是什么导致这种奇怪的结果?
我的用户代理是在Windows Server 2008上运行的Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0
。
最佳答案
免责声明:我是jsPerf.com的创建者。
您的第一个测试如下:
var i = 0;
for (i = 0; i < 1000; i++) {
test()
}
为什么在其中包括
for
循环?它只会歪曲结果。 jsPerf会自动重复测试代码,直到执行足够的测试以达到具有统计意义的结果为止。理想情况下,jsPerf测试应尽可能紧凑,并且仅测试您真正想要测试的内容。在这种情况下,您根本对for
循环性能不感兴趣-您只想了解内联代码是否比调用函数要快。如果您对创建健壮的jsPerf测试用例的其他技巧感兴趣,请访问check out my #jsconfeu2011 presentation。
注意:我并不是说多余的
for
循环是您看到此结果的原因。这可能是一个因素,但可能还有其他因素会进一步扭曲结果。 This might be IE9’s “dead code removal” feature kicking in.无论如何,我已经 fork 了您的jsPerf测试,删除了循环,并将变量设置为全局变量,以避免死代码消除优化。 http://jsperf.com/function-calls-vs-inline/3可以在IE9中测试吗?我暂时没有IE9 VM。
关于internet-explorer-9 - IE通过函数调用运行得更快?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13954881/