为什么复杂循环和许多循环之间存在如此巨大的性能差异

时间:2011-07-13 03:40:26

标签: javascript performance loops for-loop

我正在为一个项目进行一些快速循环,我决定将一个简单的测试放在一起,看看在比较runnning一个更复杂的内循环和运行几个简单的内循环时性能如何变化。这是jsperf:

http://jsperf.com/nested-fors-vs-iterative-fors

我对这种差异的显着程度感到惊讶。

任何人都可以指出为什么我的测试很糟糕(可能就是这种情况),或解释为什么性能差异。

谢谢!

IDB

3 个答案:

答案 0 :(得分:3)

我不知道你为什么需要使用underscore.js和jQuery。我写了一个比较的non-library version

  1. 100个循环的10个循环,每个1个呼叫(1,000个呼叫)
  2. 100个循环的10个电话(1,000个电话)
  3. 5个电话的200个循环(1.000个电话)
  4. 1,000次1次通话(1,000次通话)
  5. 每个人的表现非常相似。

    我认为你的问题是第一种情况是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