2015-10-26 3 views
1

У меня есть ситуация, когда я получаю данные через веб-сокет, а производительность важна. Из документов я понимаю, что существуют различные способы «подталкивания» данных, которые я получаю к своим элементам Polymer, но мне любопытно, какой из них будет наиболее эффективным. Пока что я создал элемент, который может быть включен в шаблон, где родительский элемент будет наблюдать любые изменения свойства data и соответственно реагировать. Я также экспериментировал с использованием Поведения, чтобы выполнить одно и то же, но вместо того, чтобы включать в его шаблон "data-element", он мог просто наблюдать за своим собственным свойством данных. Я понимаю, что я мог бы использовать что-то вроде iron-signals для «push» данных через событие.Наиболее эффективный способ «подталкивания» данных к полимерным элементам

Я не уверен, что любой из этих методов очень эффективен, так как большую часть времени изменения объекта «данные» будут применяться только к небольшому подмножеству всех наблюдателей. Другим возможным решением было бы «наблюдать» динамический путь, так как data.pathx вместо data.*, что резко сократило бы количество обращений к наблюдателю от наблюдателя, но я не сталкивался с чем-либо, что заставило меня думать, что это возможно, так как каждый из моих элементов не будет знать, следует ли ему соблюдать pathx или pathz до создания.

Как я уже говорил, производительность имеет жизненно важное значение, и я чувствую, что есть слишком много неэффективности, если у меня есть малый и среднего размер dom-repeat элементов каждого наблюдающий большой data объекта другого элемента или индивидуально, держащая копию этих данных на их собственные (например, я предполагаю, что поведение выполнит?).

Я просмотрел iron-meta, но мне не удалось успешно привязать данные к нему, и из того, что я могу сказать из документов, эти данные необходимо запросить, в то время как мне нужно получить уведомление о изменения.

ответ

0

Полимер действительно не «наблюдает» за изменениями в элементах. Он просто устанавливает сеттер для каждого свойства, и когда он называется UI, обновляется. Таким образом, шаблон dom-repeat не будет замечать никаких изменений внутри связанного с ним объекта.

Что может повлиять на производительность - это ненужные манипуляции с DOM, поэтому, если изменяется только небольшое подмножество данных, переопределение всего массива в свойство не является идеальным, и вы должны использовать notifyPath только с указанием пути и значения свойства изменилось. Полимер будет обновлять только затронутые узлы DOM.

Если у вас есть способ узнать, какие суб свойства были изменены в ваших данных, тогда вы можете получить пути к объектам, которые изменились, и вызвать notifyPath для каждого из них, и будет изменено только небольшое количество узлов DOM.

Если количество элементов в вашем массиве изменяется (добавлено/удалено), вы должны использовать методы манипуляции с базой массива Polymer, чтобы обновить свойство вашего элемента Polymer, поэтому оно эффективно изменит DOM.

Смежные вопросы