Dynatree addChild - 组件作者的问题

时间:2010-06-22 23:07:13

标签: dynatree jquery-dynatree

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

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

我收到两条相互矛盾的信息: Lazy Loading in dynatree 它说只有受影响的节点才会被重新渲染

Dynatree slow when dynamically loaded with 100+ nodes 这里它表示每次使用addChild时都会重新渲染

也许,我错过了什么?

是哪一个?

1 个答案:

答案 0 :(得分:1)

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

每次调用.addChild(数据)时,都会触发渲染。 如果通过一次调用传递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。

如果预加载整个树或延迟加载更加用户友好 单 按需分支取决于服务器,网络和客户端。所以这是 总是 对不同情景进行基准测试的问题。