寻找优化我的代码的方法,我偶然发现了这个 jsPerf 测试。除了重申我对函数调用缓慢的概念之外,没有任何期待,我在 IE 9 上的结果真的让我陷入了一个循环。利用函数调用的代码更快,但仅在这一浏览器上。我多次运行它,结果相同。我看不到测试设置不正确。什么可能导致这种奇怪的结果?
我的用户代理Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0
在 Windows Server 2008 上运行。
寻找优化我的代码的方法,我偶然发现了这个 jsPerf 测试。除了重申我对函数调用缓慢的概念之外,没有任何期待,我在 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 测试用例的其他技巧感兴趣,请查看我的 #jsconfeu2011 演示文稿。
注意:我并不是说冗余for
循环是您看到此结果的原因。这可能是一个因素,但可能还有其他因素会进一步扭曲结果。这可能是 IE9 的“死代码删除”功能发挥作用。
无论如何,我已经分叉了你的 jsPerf 测试,删除了循环,并使变量成为全局变量,以避免死代码消除优化。http://jsperf.com/function-calls-vs-inline/3你能在 IE9 中测试这个吗?目前我手边没有 IE9 虚拟机。