关于zTree一次性加载成千上万个子节点速度非常慢的问题

Java_er 2014-03-12 11:36:10
作者的文档中也提到了下面的两种解决办法:

2、分批异步加载大数据量

这种方法 作者也说了,加载慢。
3)、此方法并不能解决加载慢的问题,相反只会让最终结果出现的更慢,只是可以有限度的避免浏览器假死,而且显示的节点越多就越慢。
4)、对于某一级节点数至少几千个的情况,另一个解决方案是:分页异步加载。
3、分页显示大数据量
分页显示 这个也不太好吧,页面结构都已经固定死了,再加个分页,在树上的搜索这个也是个问题吧,还有分页不太友好,1万个节点,这得份100页,用户还不得找的抓狂。


请问有没啥好的解决方案啊?
...全文
2423 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
领尚 2014-03-17
  • 打赏
  • 举报
回复
引用 10 楼 Javainging 的回复:
[quote=引用 7 楼 oLinBSoft 的回复:] 我的做法是 先加载一二层菜单,三层以后的菜单点击时才加载上去,这样就不会有这个慢的问题,是按需加载三层以后菜单数据
我现在改思路了, 展开一个节点的时候,把上次展开的节点删除。[/quote] 节点删除这个没有必要,反而有弱点,因为其实占内存一点点,删除还要时间处理,第二次展开该节点时又要加载,利弊相权衡,很没必要,关键的是加载时,一是太多数据,加载慢,二是很多节点就不会去点击展开,因此才需要按需加载.
领尚 2014-03-14
  • 打赏
  • 举报
回复
我的做法是 先加载一二层菜单,三层以后的菜单点击时才加载上去,这样就不会有这个慢的问题,是按需加载三层以后菜单数据
Java_er 2014-03-14
  • 打赏
  • 举报
回复
引用 7 楼 oLinBSoft 的回复:
我的做法是 先加载一二层菜单,三层以后的菜单点击时才加载上去,这样就不会有这个慢的问题,是按需加载三层以后菜单数据
我现在改思路了, 展开一个节点的时候,把上次展开的节点删除。
enet_java 2014-03-14
  • 打赏
  • 举报
回复
!@#$%^&*&()_+|[];',./<>:"{}-=\~
enet_java 2014-03-14
  • 打赏
  • 举报
回复
引用 7 楼 oLinBSoft 的回复:
我的做法是 先加载一二层菜单,三层以后的菜单点击时才加载上去,这样就不会有这个慢的问题,是按需加载三层以后菜单数据
好办法!! !@#¥%……&*()——+|.,.<>?{}"^
潮起潮落 2014-03-13
  • 打赏
  • 举报
回复
引用 5 楼 Javainging 的回复:
[quote=引用 2 楼 KongHuLu 的回复:] 你也可以放到json里,然后点击的时候从内存对象里面取数据 或者和异步结合,因为成千上万个也不会全都访问吧
一万多个DOM节点,肯定就会慢下来了a.[/quote] 不要那么死板啊,非黑即白地去想 把握一下访问率,可以JSON数据完全加载一屏/主要部分的树,然后剩下的采用异步 打开Chrome-Network看看耗时主要在哪儿,把握好一个平衡
别闹腰不好 2014-03-12
  • 打赏
  • 举报
回复
异步加载就行了 ,展开节点后加载子节点,ztree 配置一下就可以异步加载, var setting = { showLine: true, 是否要连线 checkable: false, 是否要复选框 expandSpeed: "fast", isSimpleData: true, 是否使用简单的array格式 treeNodeKey: "code", 当前节点的ID属相 treeNodeParentKey: "parentcode", 父节点的属性 fromregioncode:"fromregioncode", nameCol: "name", 显示列 async: true,是否一步加载节点 asyncUrl: "../url", 异步加载节点的路径 asyncParam: ["code"], 异步加载时自动传的参数 callback: { click: zTreeOnClick, 节点的单击事件 beforeExpand: zTreeBeforeExpand 节点展开前的事件 } };
潮起潮落 2014-03-12
  • 打赏
  • 举报
回复
你也可以放到json里,然后点击的时候从内存对象里面取数据 或者和异步结合,因为成千上万个也不会全都访问吧
Null_Reference 2014-03-12
  • 打赏
  • 举报
回复
存文件,不过好像也慢。。。
Java_er 2014-03-12
  • 打赏
  • 举报
回复
引用 2 楼 KongHuLu 的回复:
你也可以放到json里,然后点击的时候从内存对象里面取数据 或者和异步结合,因为成千上万个也不会全都访问吧
一万多个DOM节点,肯定就会慢下来了a.
Java_er 2014-03-12
  • 打赏
  • 举报
回复
引用 3 楼 u012463264 的回复:
异步加载就行了 ,展开节点后加载子节点,ztree 配置一下就可以异步加载, var setting = { showLine: true, 是否要连线 checkable: false, 是否要复选框 expandSpeed: "fast", isSimpleData: true, 是否使用简单的array格式 treeNodeKey: "code", 当前节点的ID属相 treeNodeParentKey: "parentcode", 父节点的属性 fromregioncode:"fromregioncode", nameCol: "name", 显示列 async: true,是否一步加载节点 asyncUrl: "../url", 异步加载节点的路径 asyncParam: ["code"], 异步加载时自动传的参数 callback: { click: zTreeOnClick, 节点的单击事件 beforeExpand: zTreeBeforeExpand 节点展开前的事件 } };
关键一次性创建那么多的DOM节点在页面上,是受不了的,跟加载没多大关系啊

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧