关于dtree树生成效率

 

关于dtree树生成效率 

 

 

首先介绍一下dtree树

dtree是一个开源的、完全免费使用的javascript项目,由于其扩展性强、复用效率高的优秀特点,得到越来越多的B/S项目的青睐

dtree效果动态演示及其下载官网:http://destroydrop.com/javascripts/tree/


但是,熟悉dtree树的朋友都错误地认为:都是一次把数据读出来的,用dtree不能实现动态添加节点!

我参考了一些朋友的经验,结合自己的认识,总结了下面的一些看法.

什么时候需要用dtree树动态添加节点?
    一:树不止一层  可能五六层
    二:数据量很大 ----生成速度会很慢

那么怎么才可以怎么提高dree的效率 或者别的方法可以提高效率?生成树的时候先生成第一层 在点击第二层时才去数据库读取信息加载?


优化:采用缓冲加载的方法
读出根目录,在响应函数里验证有没有节点,没有节点则从服务器获得节点信息,动态添加节点。

还有一种方法,采用层次码方式
在树状结构中新增加层次码、是否根节点、是否叶子节点、目录深度、子节点个数、目录结构、父路径(ID类表)、子类路径(ID列表)等等树状结构信息,通过触发器自动更新这些信息。
生成树状结构时,只需用select * from tab where 条件 order by 层次码 asc即可,在分别对树状结构其他值判断即可生成树状结构。这种方法适合大数量,读取效率及生产效率高。但唯一缺陷是使用JS时一次读取大量数据到客户端,当数据量大时IE将提示“该脚本会使系统变慢”的提示给用户,用户可能会不执行这段代码。不过可以直接生成HTML代码方法,将树状结构写在HTML代码属性。

这样就可以啦,不过每次刷新都要重新生成的话,速度同样是很难提高的


tree的生成,还可以从几方面来考虑:

1. 不是每次都生成 只有第一次生成树。 像这样来写
if(!child){//不存在是生成}else{child.style.display = 'block'};
2. 不是一次性生成整棵树。
第一次只生成第一层的树,(这样当然于树只有一层) 当点击第一层的结点里才生成该节点的子节点。

就是说把生成树的时间分来,不要一次生成, 这样用户就感觉不到慢了。


还可以一层一层的加载。首先加载完毕第一层,然后第二、三层不要被加载。然后在需要展开第二层的同时,再加载第二层,以次类推,可以提高效率,类似于CSDN


在数据很大的时候,建议你要用dtree,用动态数
如果非要用dtree的话,不要用ajax请求数据再用js组装dtree,这样在数据量大的时候IE会死机
你把数据读取出来写一个静态的html,里面是dtree的树,而不是用js循环变量那样IE需要太多对象会造成死机。

最后:欢迎朋友们批评指正,我们一起找出更好的解决方案!

 

 

 

posted @ 2009-04-30 11:00  Defonds  阅读(27)  评论(0编辑  收藏  举报