javascript - 将 "pushing"数据传输到 Polymer 元素的最有效方式

标签 javascript websocket polymer

我遇到过通过网络套接字获取数据的情况,性能很重要。从文档中我了解到,有多种方法可以将我收到的数据“推送”到我的 polymer 元素,但我很好奇哪一种最有效。到目前为止,我已经创建了一个可以包含在模板中的元素,其中父元素将观察 data 属性中的任何更改并做出相应的 react 。我也一直在尝试使用行为来完成同样的事情,尽管它不需要在其模板中包含“数据元素”,而只需观察其自己的数据属性即可。我意识到我还可以使用诸如铁信号之类的东西通过事件“推送”数据。

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

就像我说的,性能至关重要,如果我有一个中小型 dom-repeat 元素,每个元素都观察一个大型数据,那么我觉得效率太低了 另一个元素的对象或单独保存该数据的副本(就像我假设一个行为会完成一样?)。

我查看了iron-meta,但我无法成功地将数据绑定(bind)到它,并且从文档中可以看出,需要查询该数据,而我需要收到更改通知。

最佳答案

Polymer 并不真正“观察”元素的变化。它只是为每个属性设置一个 setter,当它被调用时,UI 就会更新。因此 dom-repeat 模板不会观察到与其绑定(bind)的对象内部的任何变化。

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

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

补充说明: 如果数组中的元素数量发生变化(添加/删除),您应该使用 Polymer 基本数组操作方法来更新 Polymer 元素的属性,这样它将有效地更改 DOM。

关于javascript - 将 "pushing"数据传输到 Polymer 元素的最有效方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33355441/

相关文章:

javascript - AngularJS - 为 View 创建自定义转换器

c# - 从 WebSocketCollection 获取特定客户端

javascript - C# websocket服务器从javascript接收文本

javascript - polymer 硫化 保持外部链接

javascript - 为什么表单输入未定义?

javascript - 动态div和scrollTop

php - Autobahn-js 无法连接到 Ratchet Server (Wamp)

javascript - Polymer - 创建等距动态水平布局

json - Elasticsearch不返回jsonp

数字文字混淆中的 JavaScript 指数