2010-06-29 6 views
6

Wir entwickeln eine Java-Webanwendung, die JSF (Richfaces through Seam) für die Benutzeroberfläche verwendet. Ich habe mehrere Artikel gelesen, die darauf hindeuten, dass die Verwendung des Attributs "gerendert =" auf UI-Komponenten zu einem beträchtlichen Leistungseinbruch führt. Wir haben mehrere Komponenten, die wir abhängig davon, ob ihre Werte festgelegt sind, aktivieren oder deaktivieren möchten. Wenn wir beispielsweise einen Artikel zum Verkauf anbieten, hätten wir keine Menge leerer Felder für Attribute, die nicht festgelegt sind.JSF - Alternative zu "gerendert ="?

Angesichts dieser Leistungseinbußen haben wir jedoch Bedenken, mehrere "gerenderte" Felder zu verwenden. Gibt es dafür eine bessere Alternative? Können wir etwas tun, um die Leistung bei der Nutzung dieses Feldes zu verbessern?

+3

Ich würde an Links zu Artikeln interessiert sein, die den Leistungshit des gerenderten Attributs darstellen ... – Dolph

+0

Ich würde mich auch für die Profitergebnisse Ihrer Webanwendung interessieren. Hinweis: [VisualVM] (https://visualvm.dev.java.net/) + [JMeter] (http://jakarta.apache.org/jmeter/). – BalusC

+0

Sobald ein solcher Artikel hier ist vor allem der Abschnitt über „Die Kosten für Conditional Rendering“ ... http://www.jsfcentral.com/articles/speed_up_your_jsf_app_1-2.html Wir haben keine wesentliche Profilierung getan uns selbst. Wir haben noch nicht viel von der UI-Programmierung gelernt, wollten aber sicherstellen, dass wir es richtig angehen, wenn wir es tun. – Shadowman

Antwort

4

Wenn der Getter nichts anderes tut als nur eine (zwischengespeicherte) boolesche Eigenschaft zurückzugeben, dann sehe ich wirklich keine Schmerzen. Es gibt keine Alternative dazu. Am besten können Sie die Leistung verbessern, indem Sie sie im Modell (Lazy Loading) oder in der Ansicht (c:set) zwischenspeichern. Die Kosten des Getter-Methodenaufrufs sind wiederum völlig vernachlässigbar.

+1

aber seien Sie vorsichtig mit '' - es funktioniert möglicherweise nicht wie erwartet bei einigen Versionen und einigen Fällen (Iteration) – Bozho

+0

Vielen Dank für Ihre Eingabe. Wenn der Leistungseinbruch vernachlässigbar ist, werden wir ihn nutzen. – Shadowman

0

Jeder andere Weg wäre sowieso nicht frei .. also würde ich einfach den Standard JSF Weg verwenden, um Komponenten zu verstecken/anzeigen.

0

Sie können den JSF-Tag style="display : (#{bean.booleon} ? block : none)" verwenden.

+0

Aber dann ist es Code in der HTML-Seite. Mit gerenderten Attribut ist es sogar nicht im HTML-Code! – marcel