【问题标题】:what makes the same number of loops have different performance? [duplicate]是什么让相同数量的循环具有不同的性能? [复制]
【发布时间】:2020-07-06 08:39:11
【问题描述】:

var t1 = new Date().getTime()
for (let i = 0; i < 100; i++) {
  for (let j = 0; j < 1000; j++) {
    for (let k = 0; k < 10000; k++) {
    }
  }
}
var t2 = new Date().getTime()
console.log('first time', t2 - t1)

for (let i = 0; i < 10000; i++) {
  for (let j = 0; j < 1000; j++) {
    for (let k = 0; k < 100; k++) {

    }
  }
}
var t3 = new Date().getTime()
console.log('second time', t3 - t2) 

如您所见,上述两个 for 循环的执行时间似乎相同。但事实上,第二个循环将比第一个循环花费更多的时间来执行。引擎盖下有何不同?

【问题讨论】:

  • 你能从上面的代码中添加一些输出吗?
  • 切换循环的顺序不会改变我的结果,所以我猜在 100 次循环中循环 1000 次比在 1000 次循环中循环 100 次更高效
  • JavaScript 实现可以在运行代码之前免费优化代码。这可能是优化方面的差异。但这完全无关紧要,因为代码无论如何都不做任何事情。如果您在最内层循环中执行某些操作,则处理时间可能大致相同。
  • @schteppe 第一次是 257,第二次是 586 在我的控制台中。

标签: javascript performance for-loop nested-for-loop


【解决方案1】:

在第一个循环中,您正在执行:

  • 让 j=0; //100次
  • 让k=0; //100*1000=100000次

在第二个循环中,你正在执行:

  • 让 j=0; //10000次
  • 让k=0; //10000*1000=10000000次

第二个循环还有 9909900 个变量初始化,因此预计运行时间更长。

【讨论】:

  • 这是不正确的。 100*1000*10000 === 10000*1000*100。
  • @str 您不会为最内层循环的每次运行执行let k=0;
  • @str 循环次数相同,但变量初始化次数不同。
  • @Zaenille 啊,我误解了你的意思。但这几乎没有真正的区别。例如,尝试将变量增量count++ 添加到两个最内层循环中,执行时间将大致相同。
  • @str 是的,这是真的,但这不是上面提出的问题。
猜你喜欢
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 2016-08-10
  • 2014-10-09
  • 2023-03-31
  • 2021-09-01
  • 2019-11-12
相关资源
最近更新 更多