对象包装与对象“污染” - 性能取决于对象大小或数量?

时间:2012-07-10 20:18:01

标签: javascript design-patterns

我正在重写我前段时间写过的JavaScript库。 它的目的是将一个对象数组显示为一个表,可以在没有服务器通信的情况下对其进行排序,过滤和编辑。

当前解决方案使用控制显示所需的其他属性“污染”对象。 原始对象可能如下所示

{"name":"...","lastname":"...","age":27}

然后它还有其他属性,比如

{"name":"...","lastname":"...","age":27,"TTMDecode":true,"TTMChildren":[]}

另一种解决方案可能是仅包装原始对象,然后使用这些包装器。

{"decode":true,"children":[],"data":{"name":"...","lastname":"...","age":27}}

我不确定哪种解决方案更合适。 使用第二个解决方案,将原始对象更改为服务器更容易,如果它已更改,但它会使JavaScript引擎的对象数量翻倍。

该解决方案能够处理超过20,000个对象,并且在当前浏览器中速度很快。 但是40.000对象会成为一个问题吗?

我希望我能够很好地解释我的担忧。

此致

2 个答案:

答案 0 :(得分:2)

您需要的是一种设计模式。你碰巧已经在使用它了。

首先,您不应该只为视图所需的东西污染模型。这与说您不能在模型上使用便捷方法或计算属性不同。一个红色标记表示你做错了是你的视图层特有的东西,比如DOM,在模型上。我不知道你的例子中有TTMDecode ...

其次,您已经在使用设计模式。您正在使用组合装饰您的模型对象。

See this for a description of the Decorator Pattern
  and this for a description of Composition

我觉得你做得很好。

答案 1 :(得分:2)

首先,关于您的体系结构问题:为什么不使用两个属性displaydata创建父对象?您不应该因性能问题而限制您的体系结构,如果它有效,您在测量性能时会注意到它。

var obj = {
    display: {
      // display data
    },
    data: {
      // personal data
    }
);

隐含地回答了关于对象计数的问题,这通常无关紧要(如果对象本身不是很大,它不会影响你的表现)