我有一个应用程序,它目前以下列方式计算和存储数据(显然这里的情况已经非常简化,实际上内部对象中还有更多属性):
var processedData = [];
sourceData.forEach(function (d) {
processedData.push({
a: getA(d),
b: getB(d),
c: getC(d)
});
}, this);
function DoStuff(row) {
// Do Some Stuff
}
这里创建的对象数量可能很高(数千),使用当前方法的性能很好,但在更广泛的上下文中,我认为如果我转移到更加定义的对象格式,它将真正提高代码可读性和可测试性:
var row = function (a, b, c) {
this.a = a;
this.b = b;
this.c = c;
this.DoStuff = function () {
// Do Some Stuff
}
};
var processedData = [];
sourceData.forEach(function (d) {
processedData.push(new row(
getA(d),
getB(d),
getC(d)
));
}, this);
这里有两个我担心的元素,一个是用new构造一个实例化对象的性能/内存成本。第二个是在对象中包含一个具有数千个实例的函数的内存成本。我不确定这种东西是多么聪明的JavaScript。
答案 0 :(得分:1)
重新组织一下原型。只有一个功能而不是数千个
function Row (a, b, c) {
this.a = a;
this.b = b;
this.c = c;
}
Row.prototype.DoStuff = function () {
// do stuff
}
我建议使用for而不是foreach。对于小型收藏来说,这是不明智的,但对于大型收藏来说,这是不合理的
这取决于您希望如何使用您的收藏。如果你不打扰排序,分组等。东西,但需要一些随机密钥访问 - 你可以尝试创建一个哈希对象,有一些字段为 键如下所示
function getValue(key) {
return hash[key];
}
var hash = {
"key1" : { "a" : 1 , "b" : 2 , "c" : 3 },
"key2" : { "a" : 1 , "b" : 2 , "c" : 3 }
};
不确定什么是getA,getB,getC - 可能它也可以重新 工程改造的
希望有所帮助