Проблема производительности дерева просмотра в ASP.NET с IE7,8 - PullRequest
5 голосов
/ 22 июня 2011

Я использую treeview в своем приложении asp.net, в котором есть 2000 узлов.Древовидное представление загружается на IE7,8 за 40 секунд, в то время как на Firefox и Chrome та же страница занимает 1/10 раз.Есть ли решение этой проблемы.Пробовал искать это, но нашел только оставшиеся без ответа вопросы.Если это ограничение IE 7,8, то в чем причина этого.Это из-за движка рендеринга.Есть ли решение проблемы?Я имею в виду, что я пытался использовать jquery treeview, но снова он зависает в IE и всплывающее окно с предупреждением для медленного сценария.

Ответы [ 5 ]

3 голосов
/ 14 июля 2011

Вы пробовали этот плагин jQuery?http://www.jstree.com/

Он поддерживает загрузку AJAX, которая отлично подходит для дерева узлов 2000.

1 голос
/ 19 июля 2011

Когда вы откроете визуализированный html, сгенерированный из дерева, вы обнаружите, что элемент управления генерирует адскую таблицу html, tr и td, которые, я думаю, занимают очень много времени для рендеринга в IE, поэтому я предлагаю вам создайте новый пользовательский веб-элемент управления, который наследуется от элемента управления treeview, и обновите «Render Method», чтобы писать Div вместо HTML, и для этого потребуется профессиональный разработчик и дизайнер HTML.

Я думаю, что после этого вы сможете поделиться этим новым контролем с сообществом, и мы сможем улучшить его с вами, чтобы избавиться от этого фиктивного вида сетки asp.net.

1 голос
/ 18 июля 2011

Должно быть что-то еще происходит. Я провел некоторое тестирование производительности на TreeView и смог отобразить сложную древовидную структуру, содержащую 5000 узлов, за гораздо меньшее время, чем 40 секунд. Сложное дерево 2000 узлов визуализируется за 3 секунды в IE8. Если вы можете предоставить более подробную информацию о вашем дереве, возможно, я смогу предоставить дополнительную помощь.

Я читал, что количество отображаемого 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 голосов
/ 04 июня 2014

Установка атрибута HoverNodeStyle-CssClass = "nh" замедляет рендеринг TreeView в IE9.Я удалил атрибут и производительность восстановлена.

0 голосов
/ 22 июня 2011

Всегда полезно использовать AJAX в вашем приложении и динамически загружать древовидное представление через AJAX.Вот ссылка ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...