[英]Most efficient way of “pushing” data to Polymer elements
我遇到的情况是我通过Web套接字获取数据,而性能很重要。 从文档中我了解到,可以采用多种方式将接收到的数据“推送”到我的Polymer元素,但是我很好奇哪种方法最有效。 到目前为止,我已经创建了可以包含在模板中的元素,其中父元素将观察data
属性中的任何更改并做出相应的反应。 我也一直在尝试使用行为来完成相同的事情,尽管它不必在模板中包含"data-element"
,而只需观察自己的数据属性即可。 我意识到我还可以使用诸如iron-signals
类的东西通过事件“推送”数据。
我不确定这些方法是否非常有效,因为在大多数情况下,对“数据”对象的更改将仅适用于所有观察者的一小部分。 另一种可能的解决方案是“观察”动态路径,例如data.pathx
而不是data.*
,这将大大减少观察者回调被触发的次数,但是我没有遇到任何导致我转向认为这是可能的,因为我的每个元素在创建之前都不知道应该遵守pathx
还是pathz
。
就像我说的那样,性能至关重要,如果我有一个小型到中型的dom-repeat
元素,每个元素都观察另一个元素的大data
对象,或者自己单独持有该数据的副本,那么我会觉得效率很低(例如我认为某种行为会完成?)。
我已经看过iron-meta
,但是我无法成功将数据绑定到它,并且从我从文档中可以得知,需要查询此数据,而需要将更改通知我。
Polymer并不真正“观察”元素的变化。 它只是为每个属性设置一个setter,并在调用时更新UI。 因此,dom-repeat模板将不会观察到绑定到它的对象内部的任何变化。
可能会影响性能的是不必要的DOM操作,因此,如果仅一小部分数据更改,则不理想的是将所有数组重新分配给该属性,那么您应该仅将notifyPath与更改的子属性路径和值一起使用。 Polymer只会更新受影响的DOM节点。
如果您有办法知道数据中哪些子属性发生了更改,那么您可以获取已更改的对象路径,并为每个路径调用notifyPath,只有少量的DOM节点将被更改。
附加说明:如果更改(添加/删除)了数组中元素的数量,则应使用Polymer基础数组操作方法来更新Polymer元素的属性,这样它将有效地更改DOM。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.