OVH Cloud OVH Cloud

ecrire un Render efficace ?

5 réponses
Avatar
TOny
Je surcharge la méthode Render d'un composant héritant de la classe
WebControl.
J'ai enormement d'elements à rendre : 5 000 éléments multipliés par
plusieurs controles (en effet pour chaque element j'ai un des images, des
liens ...)
Je n'utilise que des HtmlControls et je suis amené à les "emboiter" :
el.controls.add(...).
Et je fini par un el.RenderControl(writer)

En espérant avoir été clair sur mon principe de fonctionnement, je peux dire
que cela fonctionne !
Où est le problème ? dans la rapidité !!
En effet pour "rendre" mon compo il faut environ 30 secondes !
J'ai l'impression que IE rame à fond (même pour décharger la page) et cela
n'est pas nouveau pour de grosses pages mais je souhaitais savoir s'il y
avait quelques principes à respecter pour avoir une génération optimale de
code ?

Par avance merci

Tony

5 réponses

Avatar
Frédéric LAMBOUR
Regarde la taille du ViewState, peut-être conserves-tu l'état des 5000
controles el.controls.add(...).

"TOny" <tony_barret@(no_spam)hotmail.com> a écrit dans le message de
news:
Je surcharge la méthode Render d'un composant héritant de la classe
WebControl.
J'ai enormement d'elements à rendre : 5 000 éléments multipliés par
plusieurs controles (en effet pour chaque element j'ai un des images, des
liens ...)
Je n'utilise que des HtmlControls et je suis amené à les "emboiter" :
el.controls.add(...).
Et je fini par un el.RenderControl(writer)

En espérant avoir été clair sur mon principe de fonctionnement, je peux


dire
que cela fonctionne !
Où est le problème ? dans la rapidité !!
En effet pour "rendre" mon compo il faut environ 30 secondes !
J'ai l'impression que IE rame à fond (même pour décharger la page) et cela
n'est pas nouveau pour de grosses pages mais je souhaitais savoir s'il y
avait quelques principes à respecter pour avoir une génération optimale de
code ?

Par avance merci

Tony




Avatar
TOny
Justement non !
C'est pour cela que je suis passé par des HtmlControls !!
C'est pour éviter les viewstate car evidement avec autant d'element dès
qu'il y a le moindre evenement, j'ai un postback qui dure une eternité !

Tony

"Frédéric LAMBOUR" a écrit dans le message
de news:
Regarde la taille du ViewState, peut-être conserves-tu l'état des 5000
controles el.controls.add(...).

"TOny" <tony_barret@(no_spam)hotmail.com> a écrit dans le message de
news:
Je surcharge la méthode Render d'un composant héritant de la classe
WebControl.
J'ai enormement d'elements à rendre : 5 000 éléments multipliés par
plusieurs controles (en effet pour chaque element j'ai un des images, des
liens ...)
Je n'utilise que des HtmlControls et je suis amené à les "emboiter" :
el.controls.add(...).
Et je fini par un el.RenderControl(writer)

En espérant avoir été clair sur mon principe de fonctionnement, je peux


dire
que cela fonctionne !
Où est le problème ? dans la rapidité !!
En effet pour "rendre" mon compo il faut environ 30 secondes !
J'ai l'impression que IE rame à fond (même pour décharger la page) et
cela
n'est pas nouveau pour de grosses pages mais je souhaitais savoir s'il y
avait quelques principes à respecter pour avoir une génération optimale
de
code ?

Par avance merci

Tony








Avatar
Patrice
Quel est la taille du code HTML résultant ?

Il faut déjà essayer de voir si le problème est le temps de génération côté
serveur du code HTML ou si le problème est le temps de transmission et de
rendu de la page vers le client.

Patrice

--

"TOny" <tony_barret@(no_spam)hotmail.com> a écrit dans le message de
news:
Je surcharge la méthode Render d'un composant héritant de la classe
WebControl.
J'ai enormement d'elements à rendre : 5 000 éléments multipliés par
plusieurs controles (en effet pour chaque element j'ai un des images, des
liens ...)
Je n'utilise que des HtmlControls et je suis amené à les "emboiter" :
el.controls.add(...).
Et je fini par un el.RenderControl(writer)

En espérant avoir été clair sur mon principe de fonctionnement, je peux


dire
que cela fonctionne !
Où est le problème ? dans la rapidité !!
En effet pour "rendre" mon compo il faut environ 30 secondes !
J'ai l'impression que IE rame à fond (même pour décharger la page) et cela
n'est pas nouveau pour de grosses pages mais je souhaitais savoir s'il y
avait quelques principes à respecter pour avoir une génération optimale de
code ?

Par avance merci

Tony




Avatar
TOny
La taille du code généré est évidenmment assez conséquent. Le traitement
coté serveur se produit assez vite. La lenteur provient du temps de
transmission et du rendu coté IE.
J'ai remarqué un phénomène assez bizarre, j'ai programmé grosso modo 2 fois
la même chose (toujours sans gestion de viewstate) :
Méthode 1 : implémentation de la surcharge de la méthode Render
Méthode 2 : implémentation de la méthode CreateChildControls

La méthode 2 est environ 2 à 3 fois plus rapide pour la même taille de code
généré !
D'où mon interrogation pour bien programmer la méthode Render !

Tony

"Patrice" a écrit dans le message de news:

Quel est la taille du code HTML résultant ?

Il faut déjà essayer de voir si le problème est le temps de génération
côté
serveur du code HTML ou si le problème est le temps de transmission et de
rendu de la page vers le client.

Patrice

--

"TOny" <tony_barret@(no_spam)hotmail.com> a écrit dans le message de
news:
Je surcharge la méthode Render d'un composant héritant de la classe
WebControl.
J'ai enormement d'elements à rendre : 5 000 éléments multipliés par
plusieurs controles (en effet pour chaque element j'ai un des images, des
liens ...)
Je n'utilise que des HtmlControls et je suis amené à les "emboiter" :
el.controls.add(...).
Et je fini par un el.RenderControl(writer)

En espérant avoir été clair sur mon principe de fonctionnement, je peux


dire
que cela fonctionne !
Où est le problème ? dans la rapidité !!
En effet pour "rendre" mon compo il faut environ 30 secondes !
J'ai l'impression que IE rame à fond (même pour décharger la page) et
cela
n'est pas nouveau pour de grosses pages mais je souhaitais savoir s'il y
avait quelques principes à respecter pour avoir une génération optimale
de
code ?

Par avance merci

Tony








Avatar
Patrice
Si le problème vient bien du volume du code HTML à transférer et/ou de sa
structure je vois :
- vérifier si certaines constructions sont lentes à rendre. Par exemple de
longs tableaux imbriqués dont les tailles dépendent les uns des autres sont
sans doute plus long à rendre qu'un tableau de taille fixe.
- éventuellement voir si le code HTML généré peut-être réduit : par exemple
colgroup peut permettre de définir des attributs pour toute une colonne
plutôt que les répéter pour chaque colonne
- il reste classique si possible de paginer les données (si il s'agit d'une
page très complexe, est-elle vraiment pratique à utiliser, n'est il pas
possible de demander à l'utilisateur un critère de filtrage permettant de
lui renvoyer moins de données).

Côté serveur c'est sans doute plus facile de voir où se passe le temps et
d'optimiser. Le problème avec un gros volume est que la vitesse de
transmission des données établie de toute façon une limite au dessous de
laquelle il n'est pas possible de descendre...

Bon courage

Patrice

--

"TOny" <tony_barret@(no_spam)hotmail.com> a écrit dans le message de
news:%23$
La taille du code généré est évidenmment assez conséquent. Le traitement
coté serveur se produit assez vite. La lenteur provient du temps de
transmission et du rendu coté IE.
J'ai remarqué un phénomène assez bizarre, j'ai programmé grosso modo 2


fois
la même chose (toujours sans gestion de viewstate) :
Méthode 1 : implémentation de la surcharge de la méthode Render
Méthode 2 : implémentation de la méthode CreateChildControls

La méthode 2 est environ 2 à 3 fois plus rapide pour la même taille de


code
généré !
D'où mon interrogation pour bien programmer la méthode Render !

Tony

"Patrice" a écrit dans le message de news:

> Quel est la taille du code HTML résultant ?
>
> Il faut déjà essayer de voir si le problème est le temps de génération
> côté
> serveur du code HTML ou si le problème est le temps de transmission et


de
> rendu de la page vers le client.
>
> Patrice
>
> --
>
> "TOny" <tony_barret@(no_spam)hotmail.com> a écrit dans le message de
> news:
>> Je surcharge la méthode Render d'un composant héritant de la classe
>> WebControl.
>> J'ai enormement d'elements à rendre : 5 000 éléments multipliés par
>> plusieurs controles (en effet pour chaque element j'ai un des images,


des
>> liens ...)
>> Je n'utilise que des HtmlControls et je suis amené à les "emboiter" :
>> el.controls.add(...).
>> Et je fini par un el.RenderControl(writer)
>>
>> En espérant avoir été clair sur mon principe de fonctionnement, je peux
> dire
>> que cela fonctionne !
>> Où est le problème ? dans la rapidité !!
>> En effet pour "rendre" mon compo il faut environ 30 secondes !
>> J'ai l'impression que IE rame à fond (même pour décharger la page) et
>> cela
>> n'est pas nouveau pour de grosses pages mais je souhaitais savoir s'il


y
>> avait quelques principes à respecter pour avoir une génération optimale
>> de
>> code ?
>>
>> Par avance merci
>>
>> Tony
>>
>>
>
>