2008-09-23 10 views
17

Quelle est la meilleure façon de réduire la taille du champ caché viewstate dans JSF? J'ai remarqué que mon état d'affichage est d'environ 40k cela revient au client et de nouveau au serveur à chaque requête et réponse venant en particulier sur le serveur c'est un ralentissement significatif pour l'utilisateur.Comment réduire javax.faces.ViewState dans JSF

Mon environnement JSF 1.2, MyFaces, Tomcat, Tomahawk, RichFaces

Répondre

16

Avez-vous essayé de définir l'état de sauvegarde sur le serveur? Cela devrait seulement envoyer un identifiant au client, et garder l'état complet sur le serveur. Il suffit d'ajouter ce qui suit au fichier web.xml :

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

Veuillez noter que l'utilisation de l'état de serveur augmente la consommation de mémoire du serveur _a lot_! Si vous avez beaucoup d'utilisateurs (milliers) cela peut être un goulot d'étranglement très rapide. – Marcel

+1

J'ai indiqué les deux: ' javax.faces.STATE_SAVING_METHOD serveur com.sun.faces FENSE 'N'aide toujours pas. J'utilise Primefaces. – Damian

11

Si vous utilisez MyFaces vous pouvez essayer ce paramètre pour compresser le viewstate avant de l'envoyer au client.

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

Une option est de sauver complètement l'état d'affichage côté client, mais vous pouvez faire face à un problème, comme ne pas pouvoir sérialiser l'objet. Vous pouvez essayer d'utiliser un algorithme/utilitaire de compression différent en fonction de vos besoins, mais puisque le navigateur utilisera déjà le GZip par défaut, je ne suis pas sûr de ce que vous pouvez gagner.

+0

Ma plus grande préoccupation est la taille du poste du client au serveur que de nombreux utilisateurs ont beaucoup moins en amont puis en aval. Aucune compression n'a lieu lorsque le client envoie une requête –