Javascript jstree性能问题

Javascript jstree性能问题,javascript,jquery,performance,jstree,Javascript,Jquery,Performance,Jstree,我正在使用一个约有1500个节点的jsTree,最多嵌套4个级别(大多数只有1个级别深),并且我收到了Internet Explorer的“此脚本运行缓慢”错误。我从ASP.NET生成的一个直接的html数据结构开始。这棵树根本装不完。然后我尝试了xml\u数据和json\u数据,虽然效果稍好,但最终还是出错了。我最后一次尝试是异步加载。这修复了最初的负载问题,但是现在当我扩展一个较大的分支时,我得到了IE的错误 更多细节:我正在使用复选框插件,我还需要搜索功能。不幸的是,在搜索时,用户可能只输

我正在使用一个约有1500个节点的
jsTree
,最多嵌套4个级别(大多数只有1个级别深),并且我收到了Internet Explorer的“此脚本运行缓慢”错误。我从ASP.NET生成的一个直接的html数据结构开始。这棵树根本装不完。然后我尝试了
xml\u数据
json\u数据
,虽然效果稍好,但最终还是出错了。我最后一次尝试是异步加载。这修复了最初的负载问题,但是现在当我扩展一个较大的分支时,我得到了IE的错误

更多细节:我正在使用
复选框
插件,我还需要搜索功能。不幸的是,在搜索时,用户可能只输入一个字符,因此我正在查看一些大的搜索结果集

有没有人用这么大的数据集做过类似的事情?有没有关于加速jsTree的建议?或者,我最好还是为我的GUI探索其他选项


我意识到我没有发布任何代码,但是欢迎使用任何通用技术/gotcha。

jsTree支持您的所有需求

  • 在分支太大的情况下使用ajax支持
  • 也支持ajax调用

    • 我自己对它的性能有点失望

      听起来您需要尝试延迟加载:不要一次加载整个树,只根据需要加载

      也就是说,最初只加载树的主干(因此所有节点都“关闭”),然后在用户单击打开节点时只加载节点的子节点

      JsTree可以做到这一点,请参阅文档


      (你的意思是“异步加载”?)

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

      • 首先,我在jQuery对话框中使用了jsTree,但这似乎损害了性能。如果可能,不要混合使用大型JStree和对话框
      • 对于大树来说,延迟加载绝对是一种好方法。我尝试了
        json_数据
        xml_数据
        ,它们都很容易实现。它们的表现似乎差不多,但这只是基于基本的观察
      • 最后,我实现了一个穷人的分页。在我的服务器端JSON请求处理程序中,如果一个节点有X个以上的子节点,我只需将其拆分为多个节点,每个节点都有这些子节点的一部分。例如,如果节点X有1000个子节点,我给了X个子节点X1,X2,X3,…,X10,其中X1有前100个子节点,X2有下100个子节点,依此类推。这对某些人来说可能没有意义,因为您正在修改树结构,但我认为这对我来说是可行的
      jstree糟透了——对于正在添加的1000个子节点来说,“刷新”慢了10秒,或者加载一棵包含40个节点中的10000个项目的树需要一分钟的时间。经过几天的开发,我已经告诉我的同事改为查看slickgrid,因为每个人都会拒绝使用需要很长时间才能完成任何事情的页面。如果没有正确构造它,速度会更快,例如1000个节点需要3秒,但箭头将不会对关闭它产生任何影响


      这将取代ms treeview和ms imagelist的组合,后者在3秒内跨40个父节点加载相同的10000项。

      对于大型数据集,最好使用只对视口中可见的部分进行延迟渲染的组件。SlickGrid在这方面做得非常好。通过使用自定义单元格渲染器使用图标+缩进(通过填充),可以轻松引入树状外观。或者只是为SlickGrid获取一个树渲染插件。是的,对不起,我说的“异步加载”是指延迟加载。“分支太大的地方”…你是说可以加载分支的一部分吗?我已经在进行延迟加载,但是一些节点有几百个子节点,我认为这是造成问题的原因。Ajax调用是在
      “state”:“closed”、
      节点时进行的。因此,如果不想为任何特定节点加载任何子节点,只需对该节点使用
      “state:”closed“,
      。是的,这就是我正在做的。问题是,当用户扩展节点X并且X有300个子节点时,jstree croaks.300并不太多。这很奇怪。一定是因为别的什么事。总共有多少个节点?什么操作系统?什么浏览器?有多少内存?总共大约300到1500个,单个分支上可能有1000个。没有减速,你看到的最大值是多少?Windows7,IE8,4GB内存,英特尔i5处理器。