0

http://wwwendt.de/tech/dynatree/index.html

次のことを明確にしたいと思います。addChildが呼び出されると、ツリー全体が再レンダリングされますか、それともノードのみが変更されますか(追加されたノードと新しい子を持つノード)?

2つの矛盾する情報を取得しています: dynatree での遅延読み込みは、影響を受けるノードのみが再レンダリングされると言っています

ここで100以上のノードを動的にロードすると、Dynatreeは遅くなり、 addChildが使用されるたびに再レンダリングされると表示されます。

おそらく、私は何かが欠けていますか?

どちらですか?

4

1 に答える 1

1

Dynatreeは、ノードを内部構造に格納します。「レンダリング」は、ツリーのステータスを反映するためにDOMでHTML要素を作成または更新するプロセスです。たとえば、ブランチの最後のノードには特別なクラス名があるため、ノードを追加するには、前の「最後のノード」からこのクラスを削除して、新しいクラスに追加する必要があります。

.addChild(data)を呼び出すたびに、レンダリングがトリガーされます。1回の呼び出しで100ノードを渡す場合、レンダリングは1回だけ実行されるため、1つの単一ノードで100回呼び出すよりも、常にパフォーマンスが向上します。

現在(リリース0.5.4)addChildは次のパターンを使用しています。

var prevFlag = tree.enableUpdate(false);
[modify the tree]
tree.enableUpdate(prevFlag);

enableUpdate(true)はtree.redraw()を呼び出すため、ツリー全体が更新されます。これはリリース1.0で変更されますが、それでもaddChild呼び出しを組み合わせる方が高速です。

もう1つの側面は、DOMでノードがいつ作成されるかです。1.0以降、HTML要素の作成は、ノードが初めて表示(展開)されるまで延期されます。そのため、DOMを肥大化させることなく、非常に多くのノードを効率的な内部Dynatreeデータ構造にロードすることができます。

ツリー全体をプリロードする方がユーザーフレンドリーな場合、またはオンデマンドで単一ブランチを遅延ロードする場合は、サーバー、ネットワーク、およびクライアントによって異なります。したがって、さまざまなシナリオのベンチマークを常に行う必要があります。

于 2010-06-26T06:14:25.907 に答える