2017-11-12 12 views
0

Iは、このコンポーネントは、オブジェクトの配列であるプロパティ値を有するPolymer JS:アイテムを配列プロパティに追加すると、UI全体が再描画されますか?

<template is="dom-repeat" items="{{values}}"> 
    <div><span>{{item.msg}}</span></div> 
</template> 

その中に次のテンプレートマークアップを有する成分を有します。

イベントに応答して、この配列プロパティに項目を追加します。既存のすべての要素が1のインデックスでプッシュダウンされるので、ポリマーはこの完全なUIを再レンダリングして既存のDOM要素を取り除きますか?もしそうなら、DOM再レンダリングを避けるために私が実装できる最適化は何ですか。これは、Arrayが大きくなったときに高価になる可能性があります。

答えて

3

短い答えはいいえ。

Polymerについては、dom-repeatではありません。

dom-repeatの動作については、githubから確認できます。すべてのための簡単な言葉で

それに項目を割り当て、インスタンスの配列(テンプレート化関数からオブジェクト)を介し

  • ループをソートし、フィルタ関数を適用するインデックス配列を作成

    • をレンダリング既に存在する場合(前のレンダリングから)

    • もしそうでなければ、新しいものを作成し、配列にプッシュして親ノードに挿入します。

    • インスタンスを超えている場合は、削除します。

    __applyFullRefreshを参照してください。

    はい、既存のDOM要素を再利用します。

    私が言ったように、これは約dom-repeatです。 iron-listは、より良いパフォーマンスで同様のことをするか、自分のやりたい方法で作成する必要があります。

  • +0

    特に、バーチャルスクロールを実装している(つまり、コンテナを満たすのに十分なノードのみレンダリングし、スクロールを処理するためにプリキャッシングを行うだけのレンダリング)ため、 'iron-list'は大きなデータセットの方が優れています。 – craPkit

    関連する問題