最小化大页面的 JSF 视图状态



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

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

将状态保存设置为会话会大大减少请求,但会大大增加处理时间 - 现在从 350 毫秒增加到 600 毫秒。因为这是内网应用,净转账比较便宜,所以最好多发那个流程更长。

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

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

Primefaces团队已经为他们的许多支持Ajax的组件添加了功能,这些组件允许部分页面帖子。

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

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

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

最新更新