2010-07-12 9 views
1

En analysant les performances d'une page JSF2 (Mojara) renvoyant 200 lignes tabulaires, je vois que 50% du temps nécessaire pour répondre est juste en rendu. Pour les 4 secondes sur une boîte de dev, 2 sont purement jusqu'au rendu de cette page.Performances de l'interface utilisateur: répétition dans JSF2/Mojara

Quel est le meilleur moyen d'améliorer les performances?

(On m'a dit de remplacer ui: répéter avec le code jstl?)

En raison de la complexité de l'arborescence des objets JSF - le profileur ne me dit pas grand-chose.

Répondre

1

Le rendu est la tâche la plus coûteuse à tout point de vue. Mais 2 secondes c'est pas mal (ces 2 secondes avant le rendu aussi, ça sonne comme une mauvaise performance DB). N'utilisez-vous pas beaucoup les conditions à l'intérieur du composant UIData? Par exemple. h:inputText disabled="#{bean.disabled}" et ainsi de suite.

Il est difficile de dire le meilleur chemin pour améliorer les performances et il est difficile d'améliorer cela du côté JSF. N'avez-vous pas inclus la vitesse du réseau et/ou du webbrowser dans l'image complète? Une bande passante réseau médiocre et un petit tampon de réponse côté serveur peuvent bloquer l'un et l'autre. Les performances de rendu de table médiocres dans le navigateur Web peuvent bloquer l'un et l'autre. MSIE est connu pour être un désastre dans les performances de rendu de table. Essayez FireFox ou Chrome à la place. De toute façon, le remplacement de ui:repeat par c:forEach ne va pas aider beaucoup. Plus encore, le c:forEach est un peu moins efficace car il appelle le items sur chaque itération au lieu de la mettre en cache.

1

Je sais que c'est une ancienne requête mais voici une solution que j'ai trouvée efficace dans le passé. Tout dépend de ce que vous êtes en train de rendre.

Pour le rendu simple chaîne doit la liste de ses plus rapide pour créer une balise fonction lib

public static String collectionToString(Collection collection, String separator) 
{ 
    if (CisNullOrEmpty(collection)) 
    { 
    return ""; 
    } 
    // custom join implementation 
return Utils.join(collection, separator); 
} 

Pour plus complexes que vous pourriez fonctions personnalisées en fonction des objets