我正在重写我前段时间写过的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对象会成为一个问题吗?
我希望我能够很好地解释我的担忧。
此致
答案 0 :(得分:2)
您需要的是一种设计模式。你碰巧已经在使用它了。
首先,您不应该只为视图所需的东西污染模型。这与说您不能在模型上使用便捷方法或计算属性不同。一个红色标记表示你做错了是你的视图层特有的东西,比如DOM,在模型上。我不知道你的例子中有TTMDecode
...
其次,您已经在使用设计模式。您正在使用组合来装饰您的模型对象。
See this for a description of the Decorator Pattern,
and this for a description of Composition
我觉得你做得很好。
答案 1 :(得分:2)
首先,关于您的体系结构问题:为什么不使用两个属性display
和data
创建父对象?您不应该因性能问题而限制您的体系结构,如果它有效,您在测量性能时会注意到它。
var obj = {
display: {
// display data
},
data: {
// personal data
}
);
隐含地回答了关于对象计数的问题,这通常无关紧要(如果对象本身不是很大,它不会影响你的表现)