将数据“推送”到Polymer元素的最有效方法

时间:2015-10-26 20:55:18

标签: javascript websocket polymer

我遇到的情况是通过Web套接字获取数据,性能很重要。从文档中我了解到,有多种方法可以将我收到的数据“推送”到我的Polymer元素,但我很好奇哪一个最有效。到目前为止,我已经创建了一个可以包含在模板中的元素,其中父元素将观察data属性中的任何更改并做出相应的反应。我也一直在尝试使用一个Behavior来完成同样的事情,虽然它不需要在其模板中包含"data-element",但它可以只观察它自己的数据属性。我意识到我也可以使用类似iron-signals之类的东西来通过事件“推送”数据。

我不确定这些方法中的任何一种都非常有效,因为大多数情况下对“数据”对象的更改仅适用于所有观察者的一小部分。另一个可能的解决方案是“观察”一个动态路径,就像data.pathx而不是data.*一样,这会大大减少观察者回调被触发的次数,但我没有遇到过任何事情。这让我认为这是可能的,因为我的每个元素都不会知道它是否应该在创建之前观察pathxpathz

就像我说的那样,性能至关重要,如果我有一个小到中等大小的dom-repeat个元素,每个元素都观察到另一个元素的大data个对象,或者单个持有自己的数据副本(就像我假设行为会完成?)。

我看过iron-meta,但是我无法成功地将数据绑定到它,而且从我从文档中可以看出,我需要查询这些数据,而我需要收到变更通知。

1 个答案:

答案 0 :(得分:0)

聚合物并没有真正"观察"元素的变化。它只是为每个属性设置一个setter,当它被调用时,UI被更新。因此,dom-repeat模板不会观察绑定到它的对象内部的任何变化。

可能影响性能的是不必要的DOM操作,因此如果只是一小部分数据发生更改,则将所有数组重新分配给属性并不理想,并且应该只使用带有子属性路径和值的notifyPath 。 Polymer只会更新受影响的DOM节点。

如果您有办法知道数据中哪些子属性发生了变化,那么您可以获取已更改的对象路径,并为每个子对象路径调用notifyPath,并且只会更改少量DOM节点。

附加说明: 如果数组中元素的数量发生变化(添加/删除),则应使用Polymer基本数组操作方法更新Polymer元素的属性,以便有效地更改DOM。