插入性能
向Object和Map中插入新键/值对的消耗大致相当,当涉及到大量的插入操作时,Map的性能更佳function initObj(){
let obj = new Object();
let begin = Date.now();
for(let i=0;i<1000000;i++) {
obj['name'+i]=i;
//obj[i]=i
}
let end = Date.now();
return end-begin;
}
function initMap(){
let map = new Map();
let begin = Date.now();
for(let i=0;i<1000000;i++) {
map.set('name'+i,i);
//map.set(i,i)
}
let end = Date.now();
return end-begin;
}
console.log(`object set spend ${
initObj()},map set spend ${
initMap()}`);
//object set spend 2179,map set spend 1638
如果键为整数值时 最终输出结果显示object的性能要好于map。
‘object set spend 88,map set spend 295’
查找速度
从大型Object和Map中查找键/值对的性能差异极小,如果只包含少量键/值对,Object有时候速度更快。在把Object当成数组使用的情况下(比如连续整数作为属性),浏览器引擎进行了优化,在内存中使用了更高效的布局。如果代码涉及大量查找操作时,某些情况下选用Object性能更好些。function initObj(){
let obj = new Object();
for(let i=0;i<1000000;i++) {
obj[i]=i;
// obj['name'+i]=i;
}
return obj;
}
function initMap(){
let map = new Map();
for(let i=0;i<1000000;i++) {
map.set(i,i);
// map.set('name'+i,i);
}
return map;
}
let obj = initObj();
let map = initMap();
function getObjTimes(){
let begin = Date.now();
for(let i=0;i<1000000;i++) {
let t=obj[i];
// let t=obj['name'+i];
}
let end = Date.now();
return end-begin;
}
function getMapTimes(){
let begin = Date.now();
for(let i=0;i<1000000;i++) {
let t=map.get(i);
// let t=map.get('name'+i);
}
let end = Date.now();
return end-begin;
}
console.log(`object get spend ${
getObjTimes()},map get spend ${
getMapTimes()}`);
//object get spend 5,map get spend 100
如果键不为整数时输出结果为:‘’object get spend 773,map get spend 239",可以发现Map的性能要好于Object。
删除性能
Object除了delete方法还有一些伪删除对象属性的操作,包括把属性值设置为undefined或null。对于大多数浏览器引擎来说,Map的delete()操作都比插入和查找更快,代码中涉及到大量删除操作时,应该选择Mapfunction initObj(){
let obj = new Object();
for(let i=0;i<1000000;i++) {
//obj[i]=i;
obj['name'+i]=i;
}
return obj;
}
function initMap(){
let map = new Map();
for(let i=0;i<1000000;i++) {
//map.set(i,i);
map.set('name'+i,i);
}
return map;
}
let obj = initObj();
let map = initMap();
function getObjTimes(){
let begin = Date.now();
for(let i=0;i<1000000;i++) {
//delete obj[i];
delete obj['name'+i];
}
let end = Date.now();
return end-begin;
}
function getMapTimes(){
let begin = Date.now();
for(let i=0;i<1000000;i++) {
//map.delete(i);
map.delete('name'+i);
}
let end = Date.now();
return end-begin;
}
console.log(`object delete spend ${
getObjTimes()},map delete spend ${
getMapTimes()}`);
// object delete spend 1621,map delete spend 913
如果键为整数输出结果为’object delete spend 184,map delete spend 318’ ,可以发现Object性能要好于Map