2011-06-22 56 views
5

Tôi đang sử dụng treeview trong ứng dụng asp.net của tôi có 2000 nút trong đó. Các treeview mất 40 giây để tải trên IE7,8 trong khi cùng một trang mất 1/10 thời gian trên Firefox và chrome. Có giải pháp nào cho vấn đề này. Đã cố gắng tìm kiếm điều này nhưng chỉ tìm thấy những câu hỏi chưa được trả lời. Nếu đây là một hạn chế của IE 7,8 thì lý do cho nó là gì. Có phải vì công cụ dựng hình hay không. Có giải pháp nào cho vấn đề không? Tôi có nghĩa là tôi đã thử bằng cách sử dụng jquery treeview nhưng một lần nữa nó treo IE và cảnh báo cửa sổ bật lên cho kịch bản chậm.Vấn đề hiệu suất của ASP.NET treeview với IE7,8

Vui lòng trợ giúp.

+0

bạn có thể chỉ cho kiểm soát TreeView bạn để chúng tôi có thể xem sản phẩm bạn đã đặt vv? – ChristiaanV

+0

Nó là một điều khiển asp treeview bình thường nhưng điều duy nhất là có rất nhiều javascript chạy trên render. Trang mất 4-5 giây trên FF trong khi 40 giây trên IE8. – Ankit

+0

Từ góc độ khả năng sử dụng, một trang có chứa một lượt xem tre với 2000 nút bên cạnh vô dụng. – IrishChieftain

Trả lời

0

Bạn luôn có thể sử dụng AJAX trong ứng dụng của mình và tải treeview động qua AJAX. Đây là một liên kết ...

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

+0

Đã thử nhưng tập lệnh không phản hồi. Bạn có mã nào để hỗ trợ không? – Ankit

3

Bạn đã thử plugin jQuery này chưa? http://www.jstree.com/

Nó hỗ trợ tải AJAX, điều này rất tốt cho cây nút 2000.

+0

Tôi không muốn cây ajaz. Những gì tôi đang tìm kiếm là cơ chế mà tôi có thể làm cho toàn bộ treeview tại một đi và VỚI HIỆU SUẤT – Ankit

1

Phải có điều gì đó khác đang diễn ra. Tôi đã thực hiện một số thử nghiệm hiệu năng trên TreeView và có thể kết xuất một cấu trúc cây phức tạp chứa 5000 nút trong thời gian ít hơn 40 giây. Cây phức hợp nút 2000 được hiển thị trong khoảng 3 giây trong IE8. Nếu bạn có thể cung cấp thêm một số chi tiết về cây của bạn, có lẽ tôi có thể cung cấp thêm trợ giúp.

Tôi đã đọc rằng số lượng HTML được hiển thị là một trong những yếu tố lớn nhất khi nói đến thời gian hiển thị trên cây lớn. điều thậm chí đơn giản như giảm chiều dài của một chuỗi URL bằng cách rút ngắn tên trang (nếu nút của bạn liên kết trực tiếp đến trang) hoặc thay thế các lớp CSS với nhiều kỹ thuật sử dụng style sheet nâng cao có thể làm cho nó nhanh hơn đáng kể.

Dưới đây là mã của tôi để tạo ra một cây phức tạp ngẫu nhiên của _nodeCount kích thước:

ASPX trang có một TreeView tên tv:

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

Mã Đằng sau trông giống như sau:

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); 
} 

Cập nhật 7/20
Có lẽ bạn có thể thực hiện logic trong javascript của bạn để thiết lập các biểu tượng và di chuyển nó vào mã .NET, điều này sẽ làm giảm đáng kể thời gian tải trang. Trang này, http://weblogs.asp.net/dannychen/archive/2006/01/25/436454.aspx, cho biết cách tùy chỉnh hiển thị của TreeNode; có lẽ nó có thể là một nơi khởi đầu tốt cho bạn.

+0

Tôi đã tắt chế độ xem để làm cho trọng lượng nhẹ của trang nhưng vẫn mất 50 giây để tải trên IE8. Vấn đề là tôi phải thay đổi biểu tượng của các nút và điều này chỉ có thể thông qua javascript sau khi render trang. Kết xuất như vậy sẽ mất thời gian khi nó lặp lại trên các nút và theo logic, nó thay đổi biểu tượng của các nút treeview. không có css tham gia, chỉ cần js. – Ankit

+3

Có vẻ như vấn đề thực sự là bạn cần cải thiện hiệu suất của Javascript hoặc tìm cách khác để đặt các biểu tượng sao cho bạn có thể cải thiện hiệu suất. Bạn có thể đăng mã javascript để tôi có thể thử và trợ giúp không? – Peter

+0

@Ankit - Tôi đã cập nhật câu trả lời của mình để bao gồm liên kết nói về hiển thị TreeNode tùy chỉnh. Có lẽ bạn có thể chuyển đổi javascript của bạn thành mã .Net và cải thiện hiệu suất của bạn theo cách đó. – Peter

1

Khi bạn mở html được tạo ra từ chế độ xem dạng cây, bạn sẽ thấy rằng điều khiển tạo ra một bảng html, tr và td mà tôi cho là mất rất nhiều thời gian để được hiển thị trên IE vì vậy tôi đề nghị bạn tạo một điều khiển web tùy chỉnh mới mà inhertis từ sự kiểm soát treeview và cập nhật "Render Method" để viết Div thay vì HTML và điều này sẽ đòi hỏi một nhà thiết kế phát triển và HTML chuyên nghiệp để làm điều này.

Tôi nghĩ rằng bạn có thể sau khi chia sẻ rằng điều khiển mới này với cộng đồng và chúng tôi có thể nâng cao về nó với bạn để thoát khỏi GridView asp.net giả này.

+1

Theo bài đăng của tôi http://stackoverflow.com/questions/6435445/asp-net-treeview-performance-issue-with-ie7-8/6734147#6734147, vấn đề thực sự là javascript tùy chỉnh của anh ấy mà anh ấy đang sử dụng để đặt biểu tượng . Câu trả lời của tôi thể hiện việc tạo ra TreeViews lớn hơn nhiều và vẫn chỉ mất vài giây để hiển thị trong IE. – Peter

0

Thiết lập thuộc tính HoverNodeStyle-CssClass = "nh" làm cho rendering của TreeView chậm trong IE9. Tôi đã xóa thuộc tính và hiệu suất được khôi phục.

Các vấn đề liên quan