3

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

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

将状态保存设置为会话大大减少了请求,但大大增加了处理时间——现在从 350 到 600 毫秒。因为这是Intranet应用程序,网络传输很便宜,所以最好发送更多,过程更长。

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

4

2 回答 2

0

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

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

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

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

于 2013-01-25T13:22:04.937 回答
0

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

于 2017-09-08T06:28:13.747 回答