js读取数组长度到底要耗费多少性能?

393 阅读1分钟

yi一开始学js的时候, 老师就告诉我们, 循环的时候存一下数组长度, 不用每次都去读取, 以提高性能. 于是今天尝试验证了一下:

var m = [1, 2, 3]
console.time(1)
for (let i = 0; i < 1000000000 && m.length > 0; i++) {}
console.timeEnd(1)

console.time(2)
for (let i = 0; i < 1000000000; i++) {}
console.timeEnd(2)

node中跑里几次, 结果都差不多:

1: 512.028ms 

2: 504.198ms 

于是带着疑问在chrome中跑了一下:

1: 6660.718017578125ms 

2: 503.8818359375ms

更正: 之前用m.length>0浪费了不少性能, 改如下

var m = [1, 2, 3]
console.time(1)
for (let i = 0; i < 1000000000; i++) {
m.length
}console.timeEnd(1)

console.time(2)
for (let i = 0; i < 1000000000; i++) {}
console.timeEnd(2)

chrome的结果: 

1: 552.591796875ms 

2: 512.572021484375ms


似乎...影响真的不大嘛

面对以上结果, 我仍旧不死心

var m = [1, 2, 3]
var i = 0
console.time(1)
while (m.length) {    
i++    
if (i > 1000000000) break
}
console.timeEnd(1)

i = 0
console.time(2)
while (true) {    
i++    
if (i > 1000000000) break}
console.timeEnd(2)

chrome的结果: 

1: 7494.678955078125ms 

2: 1566.7392578125ms


(๑•̀ㅂ•́)و✧ (๑•̀ㅂ•́)و✧ (๑•̀ㅂ•́)و✧ 老师诚不欺我!!!