2008-09-23 18 views
17

¿Cuál es la mejor manera de reducir el tamaño del campo oculto de viewstate en JSF? He notado que el estado de mi vista es de aproximadamente 40k, esto se reduce al cliente y vuelve al servidor en cada solicitud y respuesta que llega esporádicamente al servidor, esto representa una desaceleración significativa para el usuario.Cómo reducir javax.faces.ViewState en JSF

Mi entorno JSF 1.2, MyFaces, Tomcat, Tomahawk, RichFaces

Respuesta

16

¿Ha intentado configurar el ahorro de estado en el servidor? Esto solo debería enviar una identificación al cliente y mantener el estado completo en el servidor. Basta con añadir lo siguiente al archivo web.xml :

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

Tenga en cuenta que el uso del ahorro de estado del servidor aumenta el consumo de memoria del servidor _a lot_! Si tiene muchos usuarios (miles) esto puede ser un cuello de botella muy rápido. – Marcel

+1

he especificado tanto: ' javax.faces.STATE_SAVING_METHOD servidor com.sun.faces .enableViewStateIdRenderingD FALSE 'Todavía no ayuda. Estoy usando Primefaces. – Damian

11

Si está utilizando MyFaces puede probar esta configuración para comprimir el estado de vista antes de enviar al cliente.

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

Una opción es también salvar el estado de vista en el lado del cliente, sino que puede enfrentar algunos problemas tales como no ser capaz de serializar el objeto. Puede intentar usar diferentes algoritmos de compresión/utilidad en función de sus necesidades, pero como el navegador ya utilizará GZip de forma predeterminada, no estoy seguro de cuánto puede ganar.

+0

Mi preocupación más grande es el tamaño del mensaje desde el cliente al servidor ya que muchos usuarios tienen mucho menos aguas arriba y luego hacia abajo. No se produce compresión cuando el cliente envía una solicitud –