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

JSF Java Discussion :

Temps de rendu lamentable : Colonnes dynamiques et Lazy loading


Sujet :

JSF Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Java/ J2EE
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java/ J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Points : 15
    Points
    15
    Par défaut Temps de rendu lamentable : Colonnes dynamiques et Lazy loading
    Bonjour,

    Je me remets aux experts de developpez.com car j'ai pas trouvé la solution à mon problème.

    J'ai un p:datatable où les colonnes sont créés dynamiquement et j'utilise en même temps le lazy loading en espérant accélerer la navigation entre les différentes pages du datatable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <p:dataTable id="resultDatatable" var="op" widgetVar="resultDatatable" 
    					 styleClass="styleTable" lazy="true"  
    					value="#{myBean.lazyResults}"
    					emptyMessage="Aucune opération trouvée." paginator="true" rows="10">
    					<p:columns var="column" value="#{myBean.columns}"
    						columnIndexVar="colIndex" sortBy="#{op[column.property]}">
    						<f:facet name="header">
    							<h:outputText value="#{column.header}" />
    						</f:facet>
    						<h:outputText value="#{op.attributes.get(column.property)}" />
    					</p:columns>
    </p:dataTable>
    Pour des raisons de complexité, je suis obligé de loader les infos à partir de la mémoire :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public class OperationLazyDataModel extends LazyDataModel<OperationSearchModel> {
     
    	private List<OperationSearchModel> datasource;
            public OperationLazyDataModel(List<OperationSearchModel> datasource) {
    		super();
    		this.datasource = datasource;
    	}
            @Override
    	public List<OperationSearchModel> load(int first, int pageSize,
    			String sortField, SortOrder sortOrder, Map<String, String> filters) {
    		if (sortField != null) {
    			try {
    				Collections.sort(datasource, new LazySorter(sortField,
    						sortOrder));
    			} catch (Exception e) {
    			}
    		}
    		int dataSize = datasource.size();
    		setRowCount(dataSize);
     
    		if (dataSize > pageSize) {
    			try {
     
    				return datasource.subList(first, first + pageSize);
    			} catch (Exception e) {
    				return datasource.subList(first, first + (dataSize % pageSize));
    			}
    		} else
    			return datasource;
     
    	}
    }
    Le problème c'est au niveau du rendu du datatable qui prend en moyenne 5 secondes pour afficher une page alors que les données sont déjà récupérées à partir de la mémoire.

    J'ai besoin de comprendre pourquoi ce temps de rendu.

    J'utilise PF4 (je ne peux upgrader pour eviter des regressions sur d'autres parties de l'application).

    Merci pour vos réponses.

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Seule réponse possible: utiliser un profiler (JProfiler c'est le top par exemple) qui te dira où est perdu le temps...
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    D'après mes tests, c'est au niveau de javascript côté client que c'est long, ça se sent surtout s'il y a beaucoup de colonnes.

    Je n'utilise pas <p:columns> (ça ne devais pas exister quand j'ai commencé ou plus simplement je ne l'ai pas vu ) mais du <c:if> englobant chaque définition de colonnes (l'ordre est pré-établi), c'est mieux que l'attribut "render" (qui maintient un composant dans l'arbre des composants côté serveur) et je trouve également que les temps de rafraîchissement sont conséquents.
    Quand on regarde les requêtes http, la réponse est arrivée depuis un moment avant que l'affichage soit terminé.

    Bref, si tu trouves quelque chose, ça m'intéresse aussi.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    J'ai du analyser des problèmes de perfs sur autre chose que primefaces il n'y a pas longtemps. Et bien, il n'y a pas d'avance, il faut utiliser du profiling pour trouver le problème, on se rends vite compte qu'il n'était pas du tout où on le pensait. La timeline de chrome est un outil très bien foutu pour analyser les performances dans le browser et voir si tu perds du temps à attendre le serveur, à faire des conneries en javascript ou autre....

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Java/ J2EE
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java/ J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Effectivement, je crois que ça a un rapport avec le nombre de colonnes (parce que mon datatable a plus d'une dizaine de colonnes des fois. Le nombre de colonnes est variable en fonction des critères utilisés). Si quelqu'un connait un patch, ce serait vraiment cool.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Faut pas croire, faut mesurer

Discussions similaires

  1. DataTable avec des colonnes dynamiques
    Par PrinceDeLu dans le forum JSF
    Réponses: 5
    Dernier message: 15/04/2011, 10h54
  2. [SQLServer] ajout de colonne dynamique
    Par pi05 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/05/2006, 11h14
  3. Etat : colonnes dynamiques
    Par chris76 dans le forum Access
    Réponses: 8
    Dernier message: 26/09/2005, 16h56
  4. Colonnes dynamiques dans Rave report
    Par omarkrachni dans le forum Rave
    Réponses: 1
    Dernier message: 10/05/2005, 18h33
  5. libelles et entêtes de colonnes dynamiques
    Par valfredr dans le forum XMLRAD
    Réponses: 7
    Dernier message: 09/03/2004, 21h40

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