2010-09-21 14 views
2

Je travaille sur Weblogic 10.3.2, JSF 1.2, Richfaces 3.3.2 et Facelets 1.1.14.Problèmes de performance JSF - RichFaces montrant une page complexe

J'ai un sérieux problème de performance, en particulier en montrant ma page d'accueil, qui contient un fichier très riche: datable. Lors du déploiement de l'application sur mon serveur local, une demande peut durer plus de 5 secondes.

La page d'accueil est un ui: composition d'un template simple (le problème n'est pas dans le template, les autres pages sont relativement rapides), mais la composition elle-même est énorme (~ 1000 lignes).

La page comporte deux parties, la partie inférieure est un datatable complexe, où je l'ai mis en œuvre rowspan en utilisant une combinaison de plusieurs riche: Soustable s et rendu attribut. La méthodologie suivie peut être vue in this Richfaces forum discussion.

La partie supérieure de la page contient une liste de filtres pour le datatable. Je n'utilise pas de filtres dans les en-têtes riches: datatable, parce que je voulais quelque chose de la façon suivante.

alt text

Si le bouton Ajouter est pressé, une requête AJAX a lieu (a4j: commandButton) pour ajouter un autre objet de filtre à la collection de support, puis filtres sont nouveau rendu à l'aide a4j: répétition (pas le datatable).

Le format rich: datatable est seulement redéfini lorsque le bouton de recherche est enfoncé.

Le code de ma page est à la fin de la publication (certains champs ont été renommés).

Observations:

Modification BalusC's Debug Phase Listener, j'ai pu voir à quel point chaque phase prend. C'est la demande en appuyant sur le bouton "Ajouter", où seuls les filtres au-dessus du datatable sont rendus.

2010-09-21 11:23:41,235 - Processing new Request! 
2010-09-21 11:23:41,235 - before - RESTORE_VIEW 1 
2010-09-21 11:23:41,235 - after - RESTORE_VIEW 1 
2010-09-21 11:23:41,251 - before - APPLY_REQUEST_VALUES 2 
2010-09-21 11:23:41,454 - getRowData-16: 84,026 ms 
Home Page Query-16: 58,178 ms 
2010-09-21 11:23:42,360 - after - APPLY_REQUEST_VALUES 2 
2010-09-21 11:23:42,360 - before - PROCESS_VALIDATIONS 3 
2010-09-21 11:23:42,438 - getRowData-16: 0,005 ms 
2010-09-21 11:23:43,126 - after - PROCESS_VALIDATIONS 3 
2010-09-21 11:23:43,126 - before - UPDATE_MODEL_VALUES 4 
2010-09-21 11:23:43,188 - getRowData-16: 0,005 ms 
2010-09-21 11:23:43,938 - after - UPDATE_MODEL_VALUES 4 
2010-09-21 11:23:43,938 - before - INVOKE_APPLICATION 5 
2010-09-21 11:23:43,938 - after - INVOKE_APPLICATION 5 
2010-09-21 11:23:43,954 - before - RENDER_RESPONSE 6 
2010-09-21 11:23:44,282 - getRowData-16: 0,007 ms 
2010-09-21 11:23:45,173 - after - RENDER_RESPONSE 6 
2010-09-21 11:23:45,173 - Done with Request! 

Vous pouvez voir que la demande de valeurs Appliquer prend environ 0.8s, le processus Validations prend environ 0.8s, le modèle de mise à jour prend 0.8s, l'application Invoke (où la logique métier a lieu) prend du temps négligeable et enfin, la réponse de rendu prend 0,9s.

Quand je commenter les riches: datatable et ne montre que les filtres, le rendu est nettement plus rapide:

2010-09-21 11:50:52,780 - Processing new Request! 
2010-09-21 11:50:52,780 - before - RESTORE_VIEW 1 
2010-09-21 11:50:52,780 - after - RESTORE_VIEW 1 
2010-09-21 11:50:52,780 - before - APPLY_REQUEST_VALUES 2 
2010-09-21 11:50:52,858 - after - APPLY_REQUEST_VALUES 2 
2010-09-21 11:50:52,858 - before - PROCESS_VALIDATIONS 3 
2010-09-21 11:50:52,920 - after - PROCESS_VALIDATIONS 3 
2010-09-21 11:50:52,920 - before - UPDATE_MODEL_VALUES 4 
2010-09-21 11:50:52,967 - after - UPDATE_MODEL_VALUES 4 
2010-09-21 11:50:52,967 - before - INVOKE_APPLICATION 5 
2010-09-21 11:50:52,967 - after - INVOKE_APPLICATION 5 
2010-09-21 11:50:52,983 - before - RENDER_RESPONSE 6 
2010-09-21 11:50:53,186 - after - RENDER_RESPONSE 6 
2010-09-21 11:50:53,186 - Done with Request! 

La demande entière ne prend 400ms.

Questions:

  1. Est-ce problème de performance d'un problème d'arborescence des composants JSF?
  2. Je ne pense pas que la rupture de la page dans d'autres compositions ui aiderait. Je crois que cela aboutirait à un arbre de composants JSF identique.
  3. Que puis-je faire pour rendre la page plus rapide?

    Le code: in PasteBin

Répondre

1

J'ai trouvé quelques articles par Dan Allen (Seam en action) qui sont juste au point:

Part1

Part2

+4

Serait bien si vous ajoutez un résumé des modifications que vous avez apportées et comment cela fait la différence à chaque changement. – BalusC

2

Vous avez un arbre de composants assez complexe avec plusieurs grandes tables, tous plantés dans un seul <h:form>. Chaque fois que vous soumettez des informations relatives à une certaine table/groupe de champs, tous les dans la page seront soumis, ainsi que les valeurs qui ne semblent pas d'intérêt pour la demande particulière.

Je pense que cela aiderait beaucoup si vous divisiez The Big Form en plusieurs formes plus petites, contenant uniquement les champs qui présentent un intérêt réel pour l'action d'invocation de la requête particulière.

0

Nous avons eu exactement le même problème. Finalement, nous avons réalisé que c'était à cause du simple chargement de la page qui prenait plus de temps dans le chargement de la page elle-même.

Il s'est avéré que c'était parce que la simple demande HTTP de chargement JS prenait longtemps et de plus il ne sortait pas de CDN. Nous l'avons corrigé en déplaçant le JS de la guerre de déploiement et en activant la compression sur JBoss.

Voici une entrée de blog détaillé sur la façon dont nous l'avons fixé:

http://tudip.blogspot.in/2012/03/how-to-really-improve-jsfrichfaces.html

Hope it helps.