IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Gridview et lenteur


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut Gridview et lenteur
    Bonjour,

    j'utilise un gridview avec pagination pour afficher des donnees, tout se passe bien. Par contre une demande fonctionelle vient se rajouter. Les utilisateurs veulent avoir le controle sur le PageSize, mon soucis est lorsque le pagesize est elevé alors l'affichage est tres tres lent du au poids du HTML genere.

    Comment puis je palier à cela.

    Merci
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Points : 707
    Points
    707
    Par défaut
    Utilise le mode trace pour voir d'ou vient reellement ton probleme.

  3. #3
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par topolino Voir le message
    Bonjour,

    j'utilise un gridview avec pagination pour afficher des donnees, tout se passe bien. Par contre une demande fonctionelle vient se rajouter. Les utilisateurs veulent avoir le controle sur le PageSize, mon soucis est lorsque le pagesize est elevé alors l'affichage est tres tres lent du au poids du HTML genere.

    Comment puis je palier à cela.

    Merci
    Malheureusement, pas de solutions miracle à ceci! Il faut tout simplement limiter le pagesize à un range acceptable pour l'utilisateur au niveau du contenu et des performances. Pour demander plus, il faut passer par une autre méthode comme génerer un rapport sur un server etc.

  4. #4
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    Generer un rapport c'est a dire ?
    Le pb est le poids de l'HTML genere (2Mo).

    Peut on faire un buffer/flush pour que les lignes s'affiches au fur et a mesure ?
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    J'ai dernièrement rencontré ce genre de problématique. Déjà as-tu testé ta page sur différents navigateurs ? Quel(s) est(sont) le(s) navigateur(s) cible(s) ?

    Que contient ta page ? du javascript ? ... ?

    Pour ma part, la dernière fois que j'ai eu ça, en désactivant tout le javascript, la page se chargeait quasi instantanément en affichant environ 300 lignes sur une dizaine de colonne.

    Sinon comme il a été dit, que l'utilisateur puisse choisir un pagesize parmi une liste parmi laquelle les valeurs ont un compris acceptable réactivité/taille, c'est plutôt bien. Il faut juste prévenir l'utilisateur qu'avoir plus de lignes affichées sera plus long que moins.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Sinon pour réduire le poids de la page, il y a une bidouille qui consiste à réduire au maximum le HTML généré selon la pratique suivante (tu l'as peut-être déjà fait).

    Prenons un exemple grossier, pour chaque cellule tu as défini un style dont le nom de la classe est "styleCellule", donc 12 caractères soit 12 octets. Tu as 100 lignes et 10 colonnes donc 1000 cellules donc dans le HTML généré tu auras 1000 fois "styleCellule" donc 12000 octets. Si tu renommes ton style en "c1" tu gagnes 10 octets à chaque fois donc tu as au final 2000 octets.

    Bon c'est un exemple à la c**, mais j'ai eu le cas de développeur utilisant des noms à rallonge pour les styles, les noms d'images, ... qui une fois répétés X fois dans le html donnaient une page de taille importante.

  7. #7
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Je suis du même avis : il y a des choses qui ne sont pas à faire.

    La GridView ASP.NET n'est pas prévue pour afficher des milliers d'éléments sur une page Web. En règle générale, une page Web avec un tableau de 1000 lignes est une mauvaise page => très mauvaise ergonomie, faible lisibilité, performances pauvres, etc...

    Il faut soit imposer aux utilisateurs, du fait des contraintes techniques, une limite acceptable (200, 500, 1000 ?), selon les colonnes à afficher, le poids de la page, etc.
    Soit trouver un autre système qu'une GridView. PitMaverick78 parle d'un report, on peut aussi penser à une extraction Excel. On peut aussi mettre en place du Scrolling Ajax vertical sur la GridView (tu n'a plus à utiliser de pages, mais ne peut visualiser toutes les lignes en même temps).

    Bref, pas de solution miracle à ce problème (qui n'en est pas un en fait).

    Faut pas se laisser faire par le Business, l'expert informatique c'est toi, pas les utilisateurs. Tu argumentes et explique le pourquoi on ne peut faire ça, tu proposes une solution de contournement, mais tu n'acceptes pas des demandes farfelues

  8. #8
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par Nicolas Esprit Voir le message
    Je suis du même avis : il y a des choses qui ne sont pas à faire.

    La GridView ASP.NET n'est pas prévue pour afficher des milliers d'éléments sur une page Web. En règle générale, une page Web avec un tableau de 1000 lignes est une mauvaise page => très mauvaise ergonomie, faible lisibilité, performances pauvres, etc...
    Je plussoie entièrement!

    Citation Envoyé par Nicolas Esprit Voir le message
    Il faut soit imposer aux utilisateurs, du fait des contraintes techniques, une limite acceptable (200, 500, 1000 ?), selon les colonnes à afficher, le poids de la page, etc.
    Soit trouver un autre système qu'une GridView. PitMaverick78 parle d'un report, on peut aussi penser à une extraction Excel. On peut aussi mettre en place du Scrolling Ajax vertical sur la GridView (tu n'a plus à utiliser de pages, mais ne peut visualiser toutes les lignes en même temps).
    J'ai exactement le même problème sur l'appli que je développe actuellement: On affiche que le mois courant. "Oui, mais vous comprenez, des fois, on a besoin d'avoir un historique sur an, toussa toussa".
    La réponse qu'on a donné: à besoin spécifique, réponse spécifique. Vous demandez a votre hiérarchie qui dispose de rapports xls, complets, générés par nos serveurs et vous utilisez ca dans votre Excel.

    En plus, en général, passer par une demande comme ca, ca freine les ardeurs de ceux qui veulent des stats en long et en large et ils ne demandent que quand ils en ont besoin.

    Citation Envoyé par Nicolas Esprit Voir le message
    Bref, pas de solution miracle à ce problème (qui n'en est pas un en fait).

    Faut pas se laisser faire par le Business, l'expert informatique c'est toi, pas les utilisateurs. Tu argumentes et explique le pourquoi on ne peut faire ça, tu proposes une solution de contournement, mais tu n'acceptes pas des demandes farfelues
    Pfiou, si seulement c'était si simple
    Généralement, la technique efficace est de demander quel est la réelle utilité fonctionelle de ce besoin. Bien généralement, le client aura du mal à justifier ou dira qu'il a une utilisation non conforme de l'appli, auquel cas tu peux le remballer!

  9. #9
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    Si seulement c'etait aussi simple.

    Vous savez tres bien que la technique passe en dernier et n'a pas bcp de poids par rapport aux dirigeants. Dans mon cas c'est une demande du big boss. Souvent des solutions genial prennent vie grace aux contraintes drastiques et c'est en cela que notre metier devient interessant.

    Sur le principe je suis tout a fait d'accord avec vous, mais sur ce coup la je n'ai pas mon mot a dire et je dois trouver une solution.

    Je ne debat pas sur comment une societe devrait marcher mais une aide sur une solution.

    Savez-vous s'il est possible d'afficher un gridview ligne par ligne en jouant avec le buffer/flush ?
    Ou diminuer les nom generes par le framework qui sont souvent tres long ?
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  10. #10
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Salut,

    Pour remplir ta gridview dynamiquement, tu dois passer par du javascript. Peut etre qu'il existe un composant qui le permet. Sinon, en le faisant à la main, il faut savoir qu'un gridview est transformé en table du coté client. Pour ajouter une ligne en javascript, on peut donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <script type="text/javascript">
       function addRow(content1, content2) {
          if (!document.getElementById) return;
          tabBody = document.getElementById("myGridView");
          row = document.createElement("TR");
          cell1 = document.createElement("TD");
          cell2 = document.createElement("TD");
          textnode1 = document.createTextNode(content1);
          textnode2 = document.createTextNode(content2);
          cell1.appendChild(textnode1);
          cell2.appendChild(textnode2);
          row.appendChild(cell1);
          row.appendChild(cell2);
          tabBody.appendChild(row);
       }
    </script>
    Ensuite, il faut faire un petit script javascript qui va chercher les données de la gridview et qui la peuple...

    a+

  11. #11
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Sinon un service wcf ajax peut être?

  12. #12
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    Peux tu m'en dire plus sur WCF et ajax ?
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  13. #13
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Il me semble (mais je suis pas spécialiste la dessus) que tu peux renvoyer une page vide de données et la remplir avec de l'ajax. Cependant tu n'aurais plus le gridview et il faudrait te depatouiller avec du javascript!

  14. #14
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Es-tu vraiment sûr que c'est le poids de la page le problème?

  15. #15
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    Es-tu vraiment sûr que c'est le poids de la page le problème?
    Ben quand il dit "une page de 2Mo" j'ai envie de dire "Ouch!"

  16. #16
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par PitMaverick78 Voir le message
    Ben quand il dit "une page de 2Mo" j'ai envie de dire "Ouch!"
    S'il est en intranet, 2Mo c'est rien

  17. #17
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    S'il est en intranet, 2Mo c'est rien
    On sait pas : des fois qu'il ait cablé son réseau avec du fil de lampe de chevet

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  18. #18
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    S'il est en intranet, 2Mo c'est rien
    Faut voir le parc de PC aussi... 2Mo sur un IE6, ca fait mal! Une grosse partie des parcs entreprises est encore en IE6...

  19. #19
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    2Mo les navigateurs n'apprecient pas du tout.
    Entre la GridView et le Viewstate y a pas mal de donnees envoyees au navigateur.

    C'est pour cela que je pensais a faure un buffer pour afficher au fur et a mesure comme en peux le faire avec d'autre langage.
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  20. #20
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    Voila une solution que j'ai trouvé. A la place d'utiliser un gridview il est mieux dans mon cas d'utiliser un ListView car il utilise bcp de de viewstate.

    Pour en savoir plus je vous laisse ce lien qui sera plus exhaustif :
    http://www.beansoftware.com/ASP.NET-...-GridView.aspx
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [LG]Lenteur de parcours de fichier
    Par YéTeeh dans le forum Langage
    Réponses: 9
    Dernier message: 26/11/2003, 23h57
  2. [Débutant] Lenteur avec TComPort
    Par PhDt76 dans le forum C++Builder
    Réponses: 22
    Dernier message: 27/09/2003, 22h43
  3. lenteur d'affichage de requete dans un DBGrid
    Par nico27 dans le forum InterBase
    Réponses: 9
    Dernier message: 23/06/2003, 14h54
  4. [Sybase]probleme de lenteur
    Par MASSAKA dans le forum Sybase
    Réponses: 3
    Dernier message: 19/03/2003, 23h58
  5. Lenteur d'execution de Jbuilder 6
    Par Tsimplice dans le forum JBuilder
    Réponses: 6
    Dernier message: 18/12/2002, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo