我一直在阅读有关调整检票口会话大小的信息,我发现建议使用 LoadableDetachableModel 不要让模型永远存在。属性模型(Property 和 PropertyCompoundModel)这么贵吗?
何时使用 LDM 或属性模型?
如果您使用来自数据库的数据,几乎总是最好使用 a LoadableDetachableModel
,以便仅序列化重新加载所需的 id。
PropertyModel
并且CompoundPropertyModel
可以包装模型并使其更易于在表单中使用,但减少序列化到会话中的成本的主要方法是使用LoadableDetachableModel
.
它始终取决于您要达到的目标。因此,了解成本是多少很重要。
在请求之间,Wicket 通常会序列化您的页面对象及其引用的所有内容。这包括页面上的所有组件以及它们的所有模型。唯一不会发生这种情况的是页面是无状态的。
大多数模型实现都包含对底层模型对象的非瞬态引用,因此如果您的模型包含对大对象的引用并且页面不是无状态的,则会导致序列化时间的开销,更重要的是,会议。
LoadableDetachableModel
工作方式不同,它只包含对底层模型对象的临时引用,因此当它被序列化时,模型对象不是。这样做的缺点是您必须为每个请求重建模型对象。
所以你的问题真的是这样的:使用传统模型的成本是否超过了成本LoadableDetachableModel
?如前所述,如果您的模型对象来自数据库,则几乎总是值得使用 LDM。
您必须记住的另一件事(也是 LDM 支持的一个强有力的论点)是模型可以被链接。因此,您仍然可以使用CompoundPropertyModel
由 LDM 支持的 a。