是什么让相同数量的循环有不同的性能?
what makes the same number of loops have different performance?
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 循环看起来执行时间相同。但事实上,第二个循环比第一个循环需要更多的时间来执行。是什么让引擎盖下的差异?
在第一个循环中,您正在执行:
- 令j=0; //100次
- 令k=0; //100*1000=100000次
在第二个循环中,您正在执行:
- 令j=0; //10000次
- 令k=0; //10000*1000=10000000次
第二个循环有 9909900 个以上的变量初始化,因此预计 运行 更长。
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 循环看起来执行时间相同。但事实上,第二个循环比第一个循环需要更多的时间来执行。是什么让引擎盖下的差异?
在第一个循环中,您正在执行:
- 令j=0; //100次
- 令k=0; //100*1000=100000次
在第二个循环中,您正在执行:
- 令j=0; //10000次
- 令k=0; //10000*1000=10000000次
第二个循环有 9909900 个以上的变量初始化,因此预计 运行 更长。