JS中Map和Object频繁增删性能测试
测试
JS中的Map和Object都可以实现映射关系,它们的频繁增删性能如何呢?
下面写了3个测试函数来测试:
// 测试Object
function testObject(maxTimes){
const obj = new Object()
for(let i=0;i<maxTimes;i++){
obj[i+'a'] = i
}
for(let i=0;i<maxTimes;i++){
delete obj[i+'a']
}
return obj
}
// 测试Map
function testMap(maxTimes){
const map = new Map()
for(let i=0;i<maxTimes;i++){
map.set(i,i)
}
for(let i=0;i<maxTimes;i++){
map.delete(i)
}
return map
}
// 测试Set
function testSet(maxTimes){
const set = new Set()
for(let i=0;i<maxTimes;i++){
set.add(i)
}
for(let i=0;i<maxTimes;i++){
set.delete(i)
}
return set
}
首先是Object
const res = testObject(5000000)
chrome profile的结果,运行JS脚本花了8291ms
然后是Map
testMap(5000000)
chrome profile的结果,执行脚本花了2296ms,只有Object花费时间的27.69%
最后是Set
testSet(5000000)
chrome profile的结果,执行脚本花了2061ms,是Map花费时间的89.76%
由此可见,在频繁增删的场景下,执行效率
Object << Map < Set