寻找隐藏我的代码的方法,我遇到了this jsPerf test。除了让我的函数调用缓慢的概念得到重申之外,我没有期待任何其他东西,我在IE 9中的结果真的让我陷入了一个循环。使用函数调用的代码更快,但仅限于这一个浏览器。我运行了多次,结果相同。我看不出测试设置不正确。什么可能导致这个奇怪的结果?
我的用户代理是Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0
在Windows Server 2008上运行。
答案 0 :(得分:4)
免责声明:我是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.
无论如何,我已经分叉了你的jsPerf测试,删除了循环,并使变量成为全局变量,以避免死代码消除优化。 http://jsperf.com/function-calls-vs-inline/3你能在IE9中测试吗?我目前还没有IE9 VM。