什么时候需要在检票口使用LDM?

时间:2012-05-16 16:25:31

标签: java apache web wicket

我一直在阅读有关调整wicket会话大小的内容,我发现建议使用LoadableDetachableModel来使模型永远不会生存。属性模型(Property和PropertyCompoundModel)是如此昂贵?

何时使用LDM或属性模型?

2 个答案:

答案 0 :(得分:3)

如果您正在使用来自数据库的数据,则最好使用LoadableDetachableModel,以便只重新加载重新加载所需的ID。

PropertyModelCompoundPropertyModel可以包装模型并使其更易于在表单中使用,但降低序列化进入会话的成本的主要方法是使用LoadableDetachableModel

答案 1 :(得分:3)

它总是取决于你想要实现的目标。因此,了解成本是多少非常重要。

在请求之间,Wicket通常将您的页面对象及其引用的所有内容序列化。这包括页面上的所有组件以及所有模型。这不会发生的唯一时间是页面为stateless

大多数模型实现包含对底层模型对象的非瞬态引用,因此如果您的模型包含对大对象的引用并且页面不是无状态的,则会导致序列化时间的开销,更重要的是,会话的内存占用。

LoadableDetachableModel的工作方式不同,它只包含对底层模型对象的瞬态引用,因此在序列化时,模型对象不是。这样做的缺点是你必须为每个请求重建模型对象。

所以你的问题是这样的:使用传统模型的成本是否超过LoadableDetachableModel的成本?正如已经提到的,如果你的模型对象来自数据库,那么使用LDM几乎总是值得的。

你必须记住的另一件事(以及LDM赞成的强烈论据)是模型可以被链接。因此,您仍然可以使用由LDM支持的CompoundPropertyModel