我在我的asp.net应用程序中使用了treeview,其中包含2000个节点。在IE7,8上加载树视图需要40秒,而同一页面在Firefox和Chrome上需要1/10。有没有解决这个问题的方法。尝试搜索这个,但发现只有未解决的问题。如果这是IE 7,8的限制,那么它的原因是什么。是因为渲染引擎。这个问题有什么解决方案吗?我的意思是我尝试使用jquery树视图,但它再次挂起IE并警告弹出窗口缓慢的脚本。
请帮忙。
答案 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动态加载树视图总是好的。这是一个链接...
答案 4 :(得分:0)
设置属性HoverNodeStyle-CssClass =“nh”使得在IE9中TreeView的渲染速度变慢。我删除了属性并恢复了性能。