2011-06-22 21 views
5

我在我的asp.net应用程序中使用了treeview,它有2000个节点。树形视图需要40秒才能加载IE7,8,而同一页面则需要Firefox和Chrome的1/10时间。有没有解决这个问题的方法。试图寻找这个,但只找到未答复的问题。如果这是IE 7,8的限制,那么它的原因是什么。是因为渲染引擎吗?有没有解决这个问题的方法?我的意思是我尝试使用jQuery树状图,但它再次挂起IE和警报弹出缓慢的脚本。IE浏览器的ASP.NET treeview性能问题,8,8

请帮忙。

+0

你可以显示你的treeview控件,以便我们可以看到你设置了哪些属性等? – ChristiaanV

+0

这是一个普通的asp树视图控件,但唯一的是,有很多JavaScript在渲染上运行。页面在FF上需要4-5秒,而在IE8上需要40秒。 – Ankit

+0

从可用性的角度来看,包含2000个节点的树视图的页面几乎是无用的。 – IrishChieftain

回答

3

您是否尝试过这个jQuery插件? http://www.jstree.com/

它支持AJAX加载,这对于2000节点树很好。

+0

我不想要阿贾斯树。我正在寻找的是我可以一次渲染整个树视图的机制,并且性能 – Ankit

1

必须有别的事情正在进行。我在TreeView上进行了一些性能测试,并能够在40秒内显示包含5000个节点的复杂树结构。在IE8中大约3秒内渲染一个2000节点的复杂树。如果你可以提供一些关于你的树的更多细节,也许我可以提供更多的帮助。

我读过HTML格式的渲染量,它是在一棵大树上渲染时间的最大因素之一。即使是简单的事情,例如通过缩短页面名称(如果您的节点直接链接到页面)来缩短URL字符串的长度,或者使用更高级的样式表使用技术替换CSS类,也可以使其更快。

下面是我产生_nodeCount大小的随机复杂的树代码:

ASPX页面有一个TreeView名为TV:

<asp:TreeView ID="tv" runat="server"></asp:TreeView> 

代码背后如下所示:

private Random _rand = new Random(); 
private int _nodeCount = 2000; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     //create a big tree 
     var itemCount = 0; 
     while (itemCount < _nodeCount) 
     { 
      //create a parent item 
      var n = new TreeNode("Node " + itemCount.ToString(), itemCount.ToString()); 
      itemCount++; 

      tv.Nodes.Add(n); 

      CreateSubItem(n, ref itemCount); 
     } 
    } 
} 

protected void CreateSubItem(TreeNode parent, ref int itemCount) 
{ 
    //chance that we won't create a sub item 
    if (_rand.Next(2) == 1 || itemCount > _nodeCount) 
    { 
     return; 
    } 

    var n = new TreeNode("Child Node " + itemCount.ToString(), itemCount.ToString()); 
    itemCount++; 

    parent.ChildNodes.Add(n); 

    CreateSubItem(n, ref itemCount); 
    CreateSubItem(parent, ref itemCount); 
} 

更新7/20
也许你可以采取逻辑在你的JavaScript设置图标并将其移动到.NET代码中,这应该大大减少页面加载时间。此页面http://weblogs.asp.net/dannychen/archive/2006/01/25/436454.aspx显示了如何自定义TreeNode的渲染;也许它可能是你的一个很好的起点。

+0

我已关闭视图状态以使页面重量轻,但仍需要50秒才能加载IE8。问题是,我必须更改节点的图标,这可能只能通过页面呈现后的JavaScript。渲染因此需要时间,因为它在节点上迭代,并根据逻辑改变树视图节点的图标。没有css参与,只是js。 – Ankit

+3

看来真正的问题是,您需要提高Javascript的性能或找到另一种设置图标的方式,以便提高性能。你能发布JavaScript代码,以便我可以尝试和帮助吗? – Peter

+0

@Ankit - 我已经更新了我的答案,包括一个链接,其中介绍了自定义TreeNode渲染。也许你可以将你的javascript转换成.Net代码,并以这种方式提高你的性能。 – Peter

1

当您打开从树视图生成的呈现的html时,您会发现该控件生成了一个html表格tr和td,我认为这需要很长时间才能在IE上呈现,所以我建议您创建了一个新的自定义Web控件,该控件通过树视图控件进行更新,并更新“Render Method”来编写Div的HTML代码,这需要专业开发人员和HTML设计人员来执行此操作。

我想你可以在这之后与社区分享这个新的控制,我们可以增强它与你一起摆脱这个虚拟的asp.net gridview。

+1

每个我的帖子http://stackoverflow.com/questions/6435445/asp-net-treeview-performance-issue-with-ie7-8/6734147#6734147,真正的问题是他的自定义JavaScript,他用于设置图标。我的答案演示了生成更大的TreeView,并且仍然只需要几秒钟就可以在IE中呈现。 – Peter

0

设置属性HoverNodeStyle-CssClass =“nh”使得TreeView在IE9中渲染缓慢。我删除了属性并恢复了性能。