Как лучше всего уменьшить размер скрытого поля viewstate в JSF? Я заметил, что мое состояние просмотра составляет примерно 40 КБ, это переходит к клиенту и обратно на сервер при каждом запросе и ответе, особенно приходящем на сервер, это значительное замедление для пользователя.
Моя среда JSF 1.2, MyFaces, Tomcat, Tomahawk, RichFaces




Если вы используете MyFaces, вы можете попробовать этот параметр, чтобы сжать состояние просмотра перед отправкой клиенту.
<context-param>
<param-name>org.apache.myfaces.COMPRESS_STATE_IN_CLIENT</param-name>
<param-value>true</param-value>
</context-param> `
Один из вариантов - полностью сохранить состояние просмотра на стороне клиента, но вы можете столкнуться с некоторыми проблемами, такими как невозможность сериализации объекта. Вы можете попробовать использовать другой алгоритм / утилиту сжатия в зависимости от ваших требований, но поскольку браузер уже будет использовать GZip по умолчанию, я не уверен, сколько вы можете получить.
Вы пробовали установить сохранение состояния на сервере? Это должно только отправить идентификатор клиенту и сохранить полное состояние на сервере. Просто добавьте в файл web.xml следующее:
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
Имейте в виду, что использование сохранения состояния сервера увеличивает потребление памяти сервером много! Если у вас много пользователей (тысячи), это очень быстро может стать узким местом.
Я указал оба: <context-param> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>server</param-value> </context-param> <context-param> <param-name>com.sun.faces.enableViewStateIdRenderingD</param-name> <param-value>FALSE</param-value> </context-param> По-прежнему не помогает. Я использую Primefaces.
Больше всего меня беспокоит размер сообщения от клиента к серверу, поскольку у многих пользователей гораздо меньше исходящих сообщений, чем исходящих. Когда клиент отправляет запрос, сжатие не происходит.