长加载页面和viewstate

时间:2019-03-13 20:45:29

标签: jsf

一些背景知识

在某些情况下,由JSF生成的页面可能需要花费一些时间才能完全加载。假设网络很差(即移动网络),服务器便宜,页面更大(当今高度关注JavaScript的组件越来越多),最终用户设备已经过时并且无法处理所有这些问题javascript或其他任何原因。

此外,在所有jsf库都要求(强制?)您使用发布方法来使用精美功能的情况下,用户输入必须始终准备好有效的jsf视图状态,以便正确使用。

在这些情况下,对于最终用户而言,快速导航到应用程序的其他页面或使用已经加载的功能而不必让他在加载整个页面之前进行加载就不难了。

默认情况下,在mojarra和myfaces实现中,viewstate在渲染视图阶段的末尾生成,以便能够捕获在渲染视图阶段可能发生的任何状态更改。

Mojarra具有上下文参数(com.sun.faces.writeStateAtFormEnd)来更改此行为,但这不能处理状态可能在渲染视图阶段更改并且myfaces上没有类似选项的事实。

方法

我的第一个问题是处理这种情况的最佳方法是什么?

作为起点,我假设仅使用服务器端状态保存来限制所使用的带宽。这应该涵盖了前面的大多数示例(“服务器便宜”除外)

然后,通过生成尽快发送给客户端的视图状态ID来改进mojarra的实现方式,并在表单完全编码后保存真实状态,以保存最后的状态更改。

这里的警告是在服务器速度慢或繁忙的情况下,在状态完全写入之前,可以接收到具有该视图状态ID的后续请求。这种情况下,必须等待开始自己的过程。

实施

第二个问题,假设上述方法是有效的,您将如何以一种完全可移植的方式实现此目标?

我并没有真正考虑过它,但是似乎不喜欢在视图状态中编写不同的实现,这可能很棘手,并且可能导致严重的大脑负担,以至于无法知道哪种实现在做什么。因此,也许只有通过使用jsf spec机制才能做到这一点。

0 个答案:

没有答案