5 votes

Problème de performance des arborescences ASP.NET avec IE7,8

J'utilise un arbre dans mon application asp.net qui contient 2000 noeuds. Le chargement du treeview prend 40 secondes sur IE7,8 alors que la même page prend 1/10ème de temps sur Firefox et chrome. Existe-t-il une solution à ce problème ? J'ai essayé de faire des recherches sur ce sujet mais je n'ai trouvé que des questions sans réponse. Si c'est une limitation d'IE 7,8, alors quelle en est la raison. Est-ce à cause du moteur de rendu ? Existe-t-il une solution à ce problème ? Je veux dire que j'ai essayé d'utiliser le jquery treeview mais encore une fois il bloque l'IE et les popups d'alerte pour script lent.

Aidez-moi, s'il vous plaît.

3voto

rkw Points 5194

Avez-vous essayé ce plugin jQuery ? http://www.jstree.com/

Il prend en charge le chargement AJAX, ce qui est excellent pour un arbre de 2000 nœuds.

1voto

Peter Points 5535

Il doit y avoir autre chose qui se passe. J'ai effectué quelques tests de performance sur TreeView et j'ai pu rendre une structure arborescente complexe contenant 5000 nœuds en bien moins de 40 secondes. Un arbre complexe de 2000 nœuds a été rendu en environ 3 secondes dans IE8. Si vous pouvez fournir plus de détails sur votre arbre, je pourrai peut-être vous aider davantage.

J'ai lu que la quantité de HTML rendu est l'un des facteurs les plus importants en ce qui concerne le temps de rendu sur un grand arbre. Même des choses simples comme la réduction de la longueur d'une chaîne d'URL en raccourcissant le nom d'une page (si vos nœuds sont liés directement à des pages) ou le remplacement des classes CSS par des techniques plus avancées d'utilisation des feuilles de style peuvent rendre le rendu considérablement plus rapide.

Voici mon code pour générer un arbre complexe aléatoire composé de _nodeCount taille :

La page ASPX possède un TreeView nommé tv :

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

Le code derrière ressemble à ce qui suit :

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

Mise à jour 7/20
Vous pourriez peut-être prendre la logique de votre javascript pour définir les icônes et la déplacer dans le code .NET, ce qui devrait réduire considérablement le temps de chargement de la page. Cette page, http://weblogs.asp.net/dannychen/archive/2006/01/25/436454.aspx montre comment personnaliser le rendu d'un TreeNode ; cela pourrait être un bon point de départ pour vous.

1voto

Samir Adel Points 2203

Lorsque vous ouvrez le rendu html généré à partir de la vue arborescente, vous constaterez que le contrôle génère un enfer de table html, tr et td qui, je pense, prend un temps très long à être rendu sur IE. Je vous suggère donc de créer un nouveau contrôle web personnalisé qui hérite du contrôle treeview et de mettre à jour la "méthode de rendu" pour écrire des Div's au lieu de HTML et cela nécessitera un développeur professionnel et un concepteur HTML pour le faire.

Je pense que vous pourrez ensuite partager ce nouveau contrôle avec la communauté et nous pourrons l'améliorer avec vous pour nous débarrasser de cette fausse grille asp.net.

0voto

Naveed Butt Points 1187

Il est toujours bon d'utiliser AJAX dans votre application et de charger le treeview dynamiquement via AJAX. Voici un lien...

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

0voto

alxcalx Points 1

La définition de l'attribut HoverNodeStyle-CssClass="nh" ralentit le rendu du TreeView dans IE9. J'ai supprimé l'attribut et les performances se sont rétablies.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X