我在WebSphere 7上使用PrimeFaces 3.4和MyFaces 2.0.7。我注意到将状态保存到客户端导致请求处理速度比服务器保存状态快2倍。当客户端保存状态被激活时,请求需要150到350米。服务器状态保存时间为300到600毫秒。 POST中的ViewState大约有200kb。
所以从速度上支付的成本就是数据传输。幸运的是它只是内联网应用程序。
但令我感到奇怪的是,如何实现,在http请求中发送状态比从会话中恢复更快?我理解,虽然有几千个并发用户会话将被序列化到磁盘,因此从会话中恢复某些内容将是磁盘绑定操作,而从客户端仅限客户端绑定。
但我是测试期间唯一的用户。这种速度差异是预期的行为,还是服务器配置错误?
答案 0 :(得分:0)
MyFaces 默认情况下会在会话中序列化ViewState
。因此,即使会话本身没有被序列化,也会增加序列化开销,另外在会话中存储值也需要一些时间。
解决方案是通过web.xml
中的参数更改默认行为:
<context-param>
<param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name>
<param-value>false</param-value>
</context-param>
现在我有125到250毫秒的时间,在服务器上存储ViewState
。所以它更快。