0

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

我想澄清以下几点:调用 addChild 时 - 是重新渲染整个树还是只修改节点(添加的节点和具有新子节点的节点)?

我得到 2 条相互冲突的信息: dynatree 中的延迟加载 它说只有受影响的节点才会重新渲染

动态加载 100 多个节点时 Dynatree 速度很慢, 它表示每次使用 addChild 时都会重新渲染

也许,我错过了什么?

哪一个?

4

1 回答 1

1

Dynatree 将节点存储在内部结构中。“渲染”是在 DOM 中创建或更新 HTML 元素以反映树状态的过程。例如,分支中的最后一个节点有一个特殊的类名,因此添加一个节点需要从前一个“最后一个节点”中删除该类并将其添加到新的类中。

每次调用 .addChild(data) 时,都会触发渲染。如果一次调用传递 100 个节点,则渲染只完成一次,因此这总是比使用单个节点调用 100 次性能更高。

目前(0.5.4 版)addChild 使用这种模式:

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

enableUpdate(true) 调用 tree.redraw(),所以整个树都被更新了。这将在 1.0 版中发生变化,但即便如此,合并 addChild 调用会更快。

另一个方面是:何时在 DOM中创建节点。从 1.0 开始,HTML 元素的创建被推迟到节点第一次变得可见(展开)。因此,可以将大量节点加载到高效的内部 Dynatree 数据结构中,而不会使 DOM 膨胀。

预加载整个树或延迟加载单个分支是否对用户更友好,这取决于服务器、网络和客户端。因此,始终需要对不同场景进行基准测试。

于 2010-06-26T06:14:25.907 回答