寻找优化我的代码的方法,我偶然发现了 this jsPerf test .除了重申我对函数调用缓慢的概念之外,别无所求,我在 IE 9 上的结果确实让我陷入了循环。使用函数调用的代码速度更快,但仅限于这一浏览器。我多次运行它,结果相同。我看不出测试设置不正确。是什么导致了这个奇怪的结果?
我的用户代理是 Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0
在 Windows Server 2008 上运行。
最佳答案
免责声明:我是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/