最小化大页面的JSF ViewState

时间:2013-01-25 09:14:46

标签: performance jsf session

我目前正在使用单页面每应用设计开发 JSF 应用程序,例如桌面应用程序。这些部分放在选项卡中,每个子操作(如编辑或插入项目)都显示在对话框中。

问题是什么,它既是ViewState的大小,也是每个请求的处理时间。目前,POST中ViewState的初始大小为200kb(并且启用了压缩)。请求持续200到400毫秒(在我自己的机器上,除了我以外没有用户)。

将状态保存设置为会话会大大减少请求,但会大大增加处理时间 - 现在从350到600毫秒。因为这是内部网应用程序,所以净转移很便宜,所以更好地发送更长时间。

我不知道如何处理这个问题。是否可以减少JSF组件占用的空间?它们中的大多数在每次点击时都不会改变,但它们似乎无论如何都要反序列化和处理。或者我应该从JSF bean中丢弃每个数据(例如下拉列表的字典)并在服务层中使用密集缓存?或者我可以使用其他选项/技巧/改进?

2 个答案:

答案 0 :(得分:0)

正如您已经想到的那样,整个表单的视图状态正在每个同步回发上被序列化,以便服务器和客户端可以保持同步。 ASP.NET的工作方式几乎完全相同。

Primefaces团队为许多支持Ajax的组件添加了功能,允许部分页面发布。

http://blog.primefaces.org/?p=1842

partialSubmit属性仅序列化组件的process属性或<p:ajax>中指定的表单元素。当然,这只是Primefaces组件的解决方案,但它显着减少了我的一些较大的JSF页面上的请求大小。

答案 1 :(得分:0)

您可以使用IFrame和会话变量来减少组件树。每个iframe都会保留自己的视图。当然,在后端流程中,您的应用程序不再是单页面应用程序。但是,用户仍然可以无缝地将其视为单一年龄的应用程序。