IE7,8的ASP.NET treeview性能问题

时间:2011-06-22 05:46:31

标签: asp.net performance c#-4.0 treeview

我在我的asp.net应用程序中使用了treeview,其中包含2000个节点。在IE7,8上加载树视图需要40秒,而同一页面在Firefox和Chrome上需要1/10。有没有解决这个问题的方法。尝试搜索这个,但发现只有未解决的问题。如果这是IE 7,8的限制,那么它的原因是什么。是因为渲染引擎。这个问题有什么解决方案吗?我的意思是我尝试使用jquery树视图,但它再次挂起IE并警告弹出窗口缓慢的脚本。

请帮忙。

5 个答案:

答案 0 :(得分:3)

你试过这个jQuery插件吗? http://www.jstree.com/

它支持AJAX加载,这对于2000节点树非常有用。

答案 1 :(得分:1)

必须有其他事情发生。我在TreeView上做了一些性能测试,并且能够在远远少于40秒的时间内呈现包含5000个节点的复杂树结构。在IE8中大约3秒内渲染的2000节点复杂树。如果您可以提供有关树的更多详细信息,我可以提供更多帮助。

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

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

ASPX Page有一个名为tv:

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

Code Behind如下所示:

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的呈现;也许它可能是一个很好的起点。

答案 2 :(得分:1)

当你打开从树视图生成的渲染的html时,你会发现控件生成了一个html表,tr和td的地狱,我认为这需要很长时间才能在IE上呈现,所以我建议你创建一个新的自定义Web控件,从树视图控件开始,并更新“渲染方法”以编写Div而不是HTML,这将需要专业的开发人员和HTML设计人员来完成此操作。

我认为你可以在此之后与社区分享这个新的控件,我们可以加强它以摆脱这个虚拟的asp.net gridview。

答案 3 :(得分:0)

在您的应用程序中使用AJAX并通过AJAX动态加载树视图总是好的。这是一个链接...

http://www.codeproject.com/KB/ajax/selfloadelement.aspx

答案 4 :(得分:0)

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