2008-09-23 13 views
17

Was ist der beste Weg, um die Größe des versteckten Feldes ViewState in JSF zu reduzieren? Ich habe festgestellt, dass mein Ansichtszustand etwa 40k ist, dies geht auf den Client und zurück auf den Server bei jeder Anfrage und Antwort vor allem auf den Server kommt dies eine erhebliche Verlangsamung für den Benutzer.Wie reduziert man javax.faces.ViewState in JSF

Meine Umwelt JSF 1.2, MyFaces, Tomcat, Tomahawk, Richfaces

Antwort

16

Haben Sie versucht, die Statusspeicherung auf den Server zu setzen? Dies sollte nur eine ID an den Client senden und den vollständigen Status auf dem Server beibehalten.

<context-param> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>server</param-value> 
</context-param> 
+7

Bitte beachten Sie, dass das Speichern des Serverstatus den Serverspeicherverbrauch erhöht _a lot_! Wenn Sie viele Benutzer (Tausende) haben, kann dies sehr schnell ein Engpass sein. – Marcel

+1

Ich habe beide angegeben: ' javax.faces.STATE_SAVING_METHOD Server com.sun.faces .enableViewStateIdRenderingD FALSCH 'Immer noch nicht hilfreich. Ich benutze Primefaces. – Damian

11

Wenn Sie MyFaces verwenden, können Sie diese Einstellung versuchen, den Ansichtszustand zu komprimieren, bevor an den Client gesendet.

<context-param> 
    <param-name>org.apache.myfaces.COMPRESS_STATE_IN_CLIENT</param-name> 
    <param-value>true</param-value> 
</context-param> ` 
0

Eine Möglichkeit ist, vollständig den Anzeigestatus auf Client-Seite speichern Sie können jedoch einige Probleme, wie nicht in der Lage konfrontiert zu sein, das Objekt zu serialisieren. Vielleicht möchten Sie einen anderen Komprimierungsalgorithmus verwenden, der auf Ihren Anforderungen basiert, aber da der Browser den GZip bereits standardmäßig verwendet, bin ich mir nicht sicher, wie viel Sie gewinnen können.

+0

Meine größte Sorge ist die Größe des Post vom Client zum Server so viele Nutzer viel weniger haben Upstream-Downstream dann: die folgenden in die Datei web.xml einfach hinzufügen. Wenn der Client eine Anforderung sendet, findet keine Komprimierung statt. –

Verwandte Themen