2008-09-17 11 views
5

Zuerst ein wenig Hintergrund:Wie kann ich die Leistung des RichFaces ScrollableDataTable-Steuerelements verbessern?

ich einen Datensatz mit 288 Zeilen und 8 Spalten (2304 Datensätze) mit einem ScrollableDataTable Anzeige und die Leistung lässt viel zu wünschen übrig. Eine AJAX-Anforderung, bei der das Steuerelement erneut gerendert wird, dauert fast 20 Sekunden. Im Vergleich zu 7 Sekunden beim Rendern der gleichen Daten mit einem DataTable-Steuerelement.

Messwerte, die über Servlet-Filter und JavaScript erfasst werden, zeigen, dass praktisch die gesamte Verarbeitungszeit auf der Client-Seite verbracht wird. Von einer 19,87-Sekunden-Anfrage entfallen 3,87 Sekunden auf den Server ... mit weniger als 0,6 Sekunden auf die Abfrage und Sortierung der Daten.

Durch den Wechsel zu einem DataTable-Steuerelement werden Anforderungs-, Antwort- und Renderzyklus auf 1/3 der ScrollableDataTable reduziert, aber auch einige wichtige Features entfernt.

Und nun die Frage:

Hat sonst noch jemand erfahrene Performance-Probleme mit dem ScrollableDataTable? Was ist der effizienteste Weg, große Mengen von Tabellendaten in JSF/RichFaces mit fixierten Spalten und zweiachsigem Scrollen zu rendern?

Update:

Wir haben eine individuelle Kontrolle Schreiben endete. Durch die vollständige Kontrolle über die gerenderten Komponenten und das generierte JavaScript konnten wir eine mit der DataTable vergleichbare Reaktionszeit erreichen. Ich stimme Zack allerdings zu - Paginierung ist die richtige Antwort.

Antwort

1

Der Engpass liegt wahrscheinlich in der Phase "Render Response" des JSF-Lebenszyklus. Es wird versucht, zu viele Komponenten für die Ansicht gleichzeitig zu rendern.

Mein Vorschlag ist die Paginierung verwenden. Es sollte Ihre Leistung erheblich steigern, da es kleinere Teile der Ansicht gleichzeitig darstellt.

sicher sein, dass Ihre rich:dataTable die rows Eigenschaft festgelegt ist und auch - wenn Sie irgendeine Spalte Filterung tun - stellen Sie sicher, dass das Datum Tabelle hat auch die Eigenschaft reRender="paginator" wo paginator Ihre rich:datascroller ist.

0

Ich hatte vor langer Zeit ähnliche Probleme und schrieb schließlich ein Applet, um die Daten anzuzeigen, die mit der Seite intervenierten, indem sie das Skript "levelscript" benutzten. Meine Leistungsprobleme waren die gleichen wie das, was Sie sahen. Der Client benötigte 30 Sekunden, um die Tabellendaten zu rendern, und der Server hat meine Antwort in weniger als 2 Sekunden umgestellt.

0

Das klingt wie ein Fehler in dem Javascript, das erzeugt wird, um die Tabelle zu rendern. Hast du die Seite in verschiedenen Browsern ausprobiert? Welche JSF-Implementierung verwenden Sie (RI oder MyFaces oder etwas anderes)?

Verwandte Themen