我正在为一个项目进行一些快速循环,我决定将一个简单的测试放在一起,看看在比较runnning一个更复杂的内循环和运行几个简单的内循环时性能如何变化。这是jsperf:
http://jsperf.com/nested-fors-vs-iterative-fors
我对这种差异的显着程度感到惊讶。
任何人都可以指出为什么我的测试很糟糕(可能就是这种情况),或解释为什么性能差异。
谢谢!
IDB
答案 0 :(得分:3)
我不知道你为什么需要使用underscore.js和jQuery。我写了一个比较的non-library version:
每个人的表现非常相似。
我认为你的问题是第一种情况是100个匿名函数,每个函数发出10个调用。第二个是1,000个匿名函数,每个函数调用一个。开销可能是创建匿名函数(虽然我没有查看正在使用的库的相关内部部分)。
答案 1 :(得分:1)
在第一种情况下,您将调用一个迭代器函数100次。在第二种情况下,您将调用10次迭代器函数100次。那是函数调用次数的10倍。我会说开销是造成差异的原因。
答案 2 :(得分:1)
我认为你的测试存在一个问题 - 在你的第一个问题中,你循环遍历整数数组1 * 100
次,共执行100次函数(执行你的{{ 1}}功能10次,共执行1,000次。)
你的第二种情况循环遍历整数数组doSomething
次,共计执行1000次匿名函数,每次执行一次10 * 100
函数。遍历100项数组10次将比遍历一次需要更多时间。创建10个匿名函数并将它们分别调用100次肯定比创建一个匿名函数并调用它100次更多。这两个因素的结合使你的测试完全不同。
请改为尝试:
doSomething