2011-06-22 61 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中渲染緩慢。我刪除了屬性並恢復了性能。