各种遍历的性能 - pod4g/tool GitHub Wiki
今天在群里司徒正美说Object.keys(obj).map(key => handle(obj[key], key))
很慢,我觉得Object.keys不会慢,慢的是map,经过测试,果然验证了想法
var arr = [];
for(var i = 0;i<1000000;i++){
arr.push(i);
}
console.time("map")
Object.keys(arr).map(v => {
})
console.timeEnd("map")
console.time("forEach")
Object.keys(arr).forEach(v => {
})
console.timeEnd("forEach")
console.time("for in")
Object.keys(arr).map(v => {
})
console.timeEnd("for in")
console.time("for")
for(var j = 0,l = arr.length; j < l ;j++){
}
console.timeEnd("for")
// Object.keys 和 forin & hasOwnproperty
console.time("Object.keys")
Object.keys(arr);
console.timeEnd("Object.keys")
console.time("forin and hasOwnProperty")
for(var attr in arr){
if(arr.hasOwnProperty(attr)){
}
}
console.timeEnd("for in and hasOwnProperty")
测试结果:
map: 588.795ms
forEach: 142.258ms
for in: 618.811ms
for: 14.412ms
Object.keys: 109.387ms
forin and hasOwnProperty: 255.698ms
Object.keys and for: 129.253ms
可以得出结论(性能由高到底排列):
for > forEach > map > forin
forin and hasOwnProperty > Object.keys
最快地替代forin and hasOwnProperty
的方案为:
Object.keys and for