jstree性能问题

时间:2012-10-02 14:53:15

标签: javascript jquery performance jstree

我使用的jsTree有大约1500个节点,嵌套到最多4个级别(大多数只有1级深度),而我正在使用Internet Explorer的“这个脚本运行缓慢” 错误。我从一个由ASP.NET生成的直接html_data <li>结构开始。树根本不会完成加载。然后我尝试了xml_datajson_data,这有点好,但最终出错了。我的最后一针是异步加载。这解决了初始加载问题,但是当我扩展其中一个较大的分支时,我现在得到了IE的错误。

更多细节:我正在使用checkbox插件,我还需要能够搜索。不幸的是,在搜索时,用户可能只输入一个字符,所以我正在查看一些大量的搜索结果。

有没有人用这么大的数据集做过类似的事情?有关加快jsTree的任何建议吗?或者,我最好不要为我的GUI探索其他选项吗?

我意识到我没有发布任何代码,但欢迎任何一般技术/问题。

4 个答案:

答案 0 :(得分:4)

我还没有完全解决我的问题,但我做了一些改进,以至于我认为它可能有用(我还在测试)。我认为这对其他人有用:

  • 首先,我在jQuery对话框中使用了jsTree,但这似乎会损害性能。如果可能,请不要混用大型jsTrees和Dialogs。
  • 懒人装载绝对是大树的方式。我尝试了json_dataxml_data,它们都很容易实现。他们似乎表现相同,但这只是基于基本观察。
  • 最后,我实施了一个穷人的传呼。在我的服务器端JSON请求处理程序中,如果一个节点有多个X子节点,我只需拆分成许多节点,每个节点都有一部分子节点。例如,如果节点X说1000个孩子,我给X子节点X1,X2,X3,...,X10,其中X1有子女前100个孩子,X2有下100个孩子,依此类推。对于某些人来说,这可能没有意义,因为你正在修改树形结构,但我认为它对我有用。

答案 1 :(得分:3)

jsTree支持您的所有需求

答案 2 :(得分:3)

我自己对此表现感到有点失望。

听起来你需要尝试延迟加载:而不是一次性加载整个树,只需要根据需要加载。

也就是说,最初只加载树的主干(所以所有节点都是&#34;关闭&#34;),然后只有当用户点击打开它时才加载节点的子节点。

JsTree可以这样做,请参阅文档。

(你的意思是&#34; async loading&#34;?)

答案 3 :(得分:1)

jstree很糟糕 - 这是“刷新”,对于1000个子节点的添加速度缓慢10秒,或者在40个节点中加载10000个项目的树需要花费一分钟。经过几天的发展后,我已经告诉我的同事去看看slickgrid,因为每个人都会拒绝使用这么长时间做任何事情的页面。如果你没有正确地构造它会更快,例如1000个节点的3秒,但是箭头没有任何效果来关闭它。

这是替换ms treeview和ms imagelist的组合,它在3秒内在40个父节点上加载相同的10000个项目。