Javascript中实例化对象的性能影响

时间:2014-01-31 17:32:48

标签: javascript json

我有一个应用程序,它目前以下列方式计算和存储数据(显然这里的情况已经非常简化,实际上内部对象中还有更多属性):

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。

1 个答案:

答案 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 - 可能它也可以重新     工程改造的

希望有所帮助