繁体   English   中英

将数据“推入”聚合物元素的最有效方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM