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

Javascript “对象包装与对象包装”;“污染”性能取决于对象大小或数量?,javascript,design-patterns,Javascript,Design Patterns,我正在重写我不久前编写的JavaScript库。 其目的是将对象数组显示为一个表,无需服务器通信即可对其进行排序、筛选和编辑 当前解决方案会使用其他属性“污染”对象,这些属性是控制显示所需的。 原始对象可能如下所示 {"name":"...","lastname":"...","age":27} {"name":"...","lastname":"...","age":27,"TTMDecode":true,"TTMChildren":[]} 然后,它有这样的附加属性 {"name":"..

我正在重写我不久前编写的JavaScript库。 其目的是将对象数组显示为一个表,无需服务器通信即可对其进行排序、筛选和编辑

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

{"name":"...","lastname":"...","age":27}
{"name":"...","lastname":"...","age":27,"TTMDecode":true,"TTMChildren":[]}
然后,它有这样的附加属性

{"name":"...","lastname":"...","age":27}
{"name":"...","lastname":"...","age":27,"TTMDecode":true,"TTMChildren":[]}
另一种解决方案可能是只包装原始对象,然后使用这些包装器

{"decode":true,"children":[],"data":{"name":"...","lastname":"...","age":27}}
我不确定哪种解决方案更可取。 使用第二种解决方案,在更改原始对象的情况下,将其返回到服务器会更容易,但会使JavaScript引擎的对象数量增加一倍

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

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


您需要的是一个设计模式。你正好已经在用了

首先,您不应该用视图所需的东西污染模型。这与在模型上不能有方便的方法或计算属性不同。如果模型上存在特定于视图层的对象(如DOM),则会出现一个红色标志,表明您做得不对。我不知道您的示例中的
TTMDecode
是什么

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



我认为你做得很好

您需要的是设计模式。你正好已经在用了

首先,您不应该用视图所需的东西污染模型。这与在模型上不能有方便的方法或计算属性不同。如果模型上存在特定于视图层的对象(如DOM),则会出现一个红色标志,表明您做得不对。我不知道您的示例中的
TTMDecode
是什么

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



我认为你做得很好

首先,关于您的体系结构问题:为什么不让父对象具有两个属性
display
data
?您不应该因为性能问题而限制您的体系结构,如果它有影响,您将在测量性能时注意到它

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

这隐式地回答了关于对象数量的问题,这通常并不重要(如果对象本身不是巨大的,它不会影响您的性能)

首先,关于您的体系结构问题:为什么不让一个具有两个属性的父对象显示
数据
?您不应该因为性能问题而限制您的体系结构,如果它有影响,您将在测量性能时注意到它

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

它隐式地回答了关于对象计数的问题,这通常并不重要(如果对象本身不是很大的,它不会影响您的性能)

我不确定这个问题是否属于堆栈溢出。可能启用?对象的数量不应该限制性能。开销应该是不明显的(为了说服自己-试试!)。经验法则是编写可读、可维护的代码,并在需要时进行优化。所以,除非您有可靠的证据(即适当的基准测试)表明难以处理,否则嵌套选项才是解决方法。我不确定这个问题是否属于堆栈溢出。可能启用?对象的数量不应该限制性能。开销应该是不明显的(为了说服自己-试试!)。经验法则是编写可读、可维护的代码,并在需要时进行优化。因此,除非你有可靠的证据(即适当的基准)来表明难处理性,否则嵌套选项是可行的。谢谢你的回复,所以我会把它包装起来:)所以这和我建议的一样。谢谢您的回复,我将把它包装起来:)