2008-09-17 9 views
5

D'abord, un petit retour en arrière:Comment puis-je améliorer les performances du contrôle RichFaces ScrollableDataTable?

Je l'affichage d'un ensemble de données avec 288 lignes et 8 colonnes (2304 enregistrements) en utilisant un ScrollableDataTable et la performance laisse beaucoup à désirer. Une requête AJAX qui rediffuse le contrôle prend près de 20 secondes à compléter, par rapport à 7 secondes lors du rendu des mêmes données à l'aide d'un contrôle DataTable.

Les métriques capturées via les filtres Servlet et JavaScript montrent que la quasi-totalité du temps de traitement est consacré au client. Sur une requête de 19,87 secondes, 3,87 secondes sont passées sur le serveur ... avec moins de 0,6 seconde passé à interroger et à trier les données.

Le passage à un contrôle DataTable réduit la demande, la réponse et le cycle de rendu à 1/3 de ce que je vois avec le ScrollableDataTable, mais supprime également plusieurs fonctions importantes.

Et maintenant la question:

Quelqu'un at-il des problèmes de performance avec l'expérience ScrollableDataTable? Quel est le moyen le plus efficace pour afficher de grandes quantités de données tabulaires dans JSF/RichFaces avec des colonnes épinglées et un défilement à deux axes?

Mise à jour:

Nous avons fini par écrire un contrôle personnalisé. Un contrôle total sur les composants rendus et le JavaScript généré nous a permis d'obtenir un temps de réponse comparable à celui de DataTable. Je suis d'accord avec Zack - la pagination est la bonne réponse.

Répondre

1

Le goulot d'étranglement est très probablement dans la phase "Render Response" du cycle de vie JSF. Il essaie de rendre trop de composants pour la vue en même temps.

Ma suggestion est d'utiliser la pagination. Il devrait augmenter considérablement vos performances car il rend de plus petites portions de la vue à la fois.

Assurez-vous que votre rich:dataTable a l'ensemble de la propriété rows et aussi - si vous faites tout filtrage de colonne - assurez-vous que la table date a également la propriété reRender="paginator" où paginator est votre rich:datascroller.

0

J'ai eu des problèmes similaires il y a longtemps et j'ai fini par écrire une applet pour afficher les données qui interagissaient avec la page en utilisant le livescript. Mes problèmes de performance étaient les mêmes que ce que vous voyiez. Le client a pris plus de 30 secondes pour rendre les données de la table, et le serveur a transformé ma réponse en moins de 2 secondes.

0

Cela ressemble à un bug dans le javascript produit pour rendre la table. Avez-vous essayé la page dans différents navigateurs? Quelle implémentation JSF utilisez-vous (RI ou MyFaces ou autre chose)?

Questions connexes