Bes*_*ces 8 serialization jsf-2 view-scope
我们打开了客户端状态保存并使用ViewScoped支持bean.当打开客户端状态保存并且我们正在使用ViewScoped bean时,ViewScoped bean是否序列化到页面或是否说,存储在会话中,其中包含序列化到页面的令牌/密钥(以便页面可以回忆起来自会话的bean,如果页面被发布回自身)
这里的一个问题可能是,如果它是序列化的,那么我们可能会担心不会在ViewScoped bean上存储大型实例变量,因为它被序列化到页面并在线路上来回传递.
当打开客户端状态保存并且我们正在使用ViewScoped bean时,ViewScoped bean是否序列化到页面或是否说,存储在会话中,并且序列化到页面的令牌/密钥?
Mojarra 2.x在HTTP会话中存储视图范围的bean.有一个未记录的设置,在会话中默认最多有25个视图范围的bean.另见问题4015.换句话说,物理视图范围的bean实例永远不会存储在JSF视图状态中.它们仅由UUID引用,而UUID又存储在JSF视图状态中.因此,无论客户端/服务器状态保存方法如何,它们都不会在JSF视图状态中序列化.
这里的一个问题可能是,如果它是序列化的,那么我们可能会担心不会在ViewScoped bean上存储大型实例变量,因为它被序列化到页面并在线路上来回传递.
这是一个有效的问题.即使这是真的,我们也在讨论相当极端的情况.在视图状态大小上,每100个平均属性的100个平均实体的集合应该已经不超过额外的~5KB.请注意,您可以通过在Web服务器上启用gzip压缩来获得大量带宽,甚至可以为每个基于文本的资源高达70%.
但是,如果您正在处理大数据,那么HTTP会话存储大小可能反过来成为一个问题.另请参阅JSF 2.2内存消耗:为什么Mojarra保留了内存中最后25个视图的ViewScoped Bean?理想情况下,只要通过GET导航或浏览器选项卡关闭卸载它引用的页面,就应该销毁视图范围的bean.默认的JSF视图作用域bean不会这样做.它仅在回发到不同视图或会话到期时被销毁.
如果你碰巧使用JSF实用程序库OmniFaces,从版本2.2开始,@org.omnifaces.cdi.ViewScoped
支持在卸载期间被销毁.这应该会对HTTP会话存储大小产生积极影响.