我遇到的情况是通过Web套接字获取数据,性能很重要。从文档中我了解到,有多种方法可以将我收到的数据“推送”到我的Polymer元素,但我很好奇哪一个最有效。到目前为止,我已经创建了一个可以包含在模板中的元素,其中父元素将观察data
属性中的任何更改并做出相应的反应。我也一直在尝试使用一个Behavior来完成同样的事情,虽然它不需要在其模板中包含"data-element"
,但它可以只观察它自己的数据属性。我意识到我也可以使用类似iron-signals
之类的东西来通过事件“推送”数据。
我不确定这些方法中的任何一种都非常有效,因为大多数情况下对“数据”对象的更改仅适用于所有观察者的一小部分。另一个可能的解决方案是“观察”一个动态路径,就像data.pathx
而不是data.*
一样,这会大大减少观察者回调被触发的次数,但我没有遇到过任何事情。这让我认为这是可能的,因为我的每个元素都不会知道它是否应该在创建之前观察pathx
或pathz
。
就像我说的那样,性能至关重要,如果我有一个小到中等大小的dom-repeat
个元素,每个元素都观察到另一个元素的大data
个对象,或者单个持有自己的数据副本(就像我假设行为会完成?)。
我看过iron-meta
,但是我无法成功地将数据绑定到它,而且从我从文档中可以看出,我需要查询这些数据,而我需要收到变更通知。
答案 0 :(得分:0)
聚合物并没有真正"观察"元素的变化。它只是为每个属性设置一个setter,当它被调用时,UI被更新。因此,dom-repeat模板不会观察绑定到它的对象内部的任何变化。
可能影响性能的是不必要的DOM操作,因此如果只是一小部分数据发生更改,则将所有数组重新分配给属性并不理想,并且应该只使用带有子属性路径和值的notifyPath 。 Polymer只会更新受影响的DOM节点。
如果您有办法知道数据中哪些子属性发生了变化,那么您可以获取已更改的对象路径,并为每个子对象路径调用notifyPath,并且只会更改少量DOM节点。
附加说明: 如果数组中元素的数量发生变化(添加/删除),则应使用Polymer基本数组操作方法更新Polymer元素的属性,以便有效地更改DOM。