【问题标题】:slow jquery treeview loading缓慢的 jquery 树视图加载
【发布时间】:2011-08-16 01:29:52
【问题描述】:

我有一个从 http://jquery.bassistance.de/treeview/demo/ 获取的 jquery 树视图

当节点和子节点的数量很少时,我可以毫无问题地加载树,但随着内容的增长,加载需要很长时间,几乎到了使用树视图似乎是个坏主意的地步。

这是我构建树视图的视图的一部分

<script type="text/javascript">

    $(function () {
        $("#Ul1").treeview({

            collapsed: true,
            prerendered: true

        });


    });

</script>

<ul id="Ul1" class="treeview-black">
<%
    foreach (var t in (IEnumerable<itemSpecifications>)ViewData["items"])
{%>

    <li class="expandable"><span><%=Html.RouteLink(t.itemName, null, new { controller = "RQA", action = "itemaction", policyname = t.itemName})%></span>
     <%if (t.itemCount > 0)
       {%>

                <%for(int i=0;i<t.itemCount ;i++){%>
                                                     <ul>
                                                                <li class="expandable"><span><%=Html.RouteLink(t.subitems[i].Name, null, new { controller = "controller1", action = "itemUpdate", rule = t.subitems[i] })%></span></li>


                                                  </ul> 
                                                <%}%>


      <%}%>

<% }%>
</li>

</ul>

控制器包含以下代码:

public ActionResult Index()
    {     

            items1 = (from itemsInfo itemInfo in _itemInfoCollection
                         where itemInfo.Name == "val1"  
                         select new itemSpecifications
                         {
                             itemName = itemInfo.Name,
                          itemCount = GetItemscount(),                                 subitems = GetSubItems()                             });

              ViewData["items"] = items1 ;
               return View();
    }

有时加载整个页面需要很长时间,以至于页面基本上崩溃(无法加载),有时当页面成功加载并且我单击节点旁边的任何加号时,需要很长时间才能打开子项目。值得一提的是,平均子节点是 400 项,任何建议将不胜感激,我使用的是 MVC3,它在 IE 中

谢谢

【问题讨论】:

  • 哇,您会碰巧知道页面上有多少个节点(父母 + 孩子 + 孩子的孩子等)?

标签: jquery asp.net-mvc-3 treeview


【解决方案1】:

听起来/看起来有问题的页面在初始加载时正在加载整个结构。这就是“预渲染”标志的作用。由于您的列表非常大(x 节点 + 每个节点 400 项),您正在关注重要的客户端性能问题,尤其是在较旧的 IE 浏览器中,它对 JS 操作的性能非常糟糕。

如果您动态加载每个子菜单而不是预渲染它,可能会更好。唯一的问题是随着 DOM 的增长,它最终会变慢。

您能否提供一个您尝试渲染的对象深度的样本,以及每个对象的参数数量?不需要真实的数据,只需要计数。 IE。节点级别 1 有 5 个参数,级别 1 上可以有多达 500 个节点;节点级别 2 有 12 个参数,级别 2 上可以有 400 个节点,等等。

【讨论】:

  • 有 27 个原始节点/类(每个节点是类的名称,并且类的其他成员本身就是其他类的列表)这 27 个节点平均在 250 到 450 之间当然,有些节点的数量要少得多。而原来的 27 个节点只有一层子节点,因此没有其他深度层。为了正确理解您的建议,我有一个问题,我阅读了有关单击时加载每个节点的信息,但我没有找到执行此操作的示例代码,因此创建了一个相关的 ajax 函数,该函数可以获取节点名称并返回该类节点
  • 所以可能在 500 到 10,000+ 之间。在这种情况下,500 实际上是一个相当大的数字 - 听起来 TreeView 正在将一个或多个函数绑定到每个节点。好奇这在其他浏览器(例如 Chrome)中的表现如何?
  • 对于 AJAX,您必须在单独的服务器调用中将节点公开为 JSON,然后能够在单击树时将参数传递给它,以便它会抓取该组节点并渲染它们。
  • 还没有测试过,但是你能推荐一些动态负载的样本吗?所以当用户点击一个节点时,树会加载子节点
  • @Sue, jstree.com 支持 AJAX 加载。看看那个和它的文档。
猜你喜欢
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多