【发布时间】:2018-12-23 18:23:42
【问题描述】:
foo.v = {
rolo: 'a',
cholo: 'b',
yolo: 'c'
};
我有一个长期运行的有状态进程,我为某些类型的请求创建新对象。我的问题是,如果我在内存中有一个像 v 这样的对象。
在内存重新分配方面是否更高效:
delete foo.v.cholo;
或者有时这样做更好:
foo.v.cholo = undefined
我在 V8 的内部读到过,删除操作符会改变对象并防止它们被轻易地垃圾收集或类似的东西。见:
https://github.com/google/google-api-nodejs-client/issues/375
我也会考虑使用 Map 而不是对象,我尝试将 delete 运算符与Map.prototype.delete 进行比较,但 delete 运算符在这里性能更高,也许我的测试不是很好:
{
const obj = {};
const start = Date.now();
for(let i =0; i < 1000000; i++){
obj['foo'] = true;
delete obj['foo'];
}
console.log('done after:', Date.now() - start);
}
{
const m = new Map();
const start = Date.now();
for(let i =0; i < 1000000; i++){
m.set('foo',true);
m.delete('foo');
}
console.log('done after:', Date.now() - start);
}
【问题讨论】:
-
你应该在你的代码库中衡量它。还要注意有differences between deleting and setting to
undefined。