2011-03-26 49 views
2

在JSF中,各组件的状态被存储在请求之间” - 这意味着数据是在应用程序服务器高速缓存(!?)因此服务器现在将有更大的内存要求(!?) 。JSF是否缓存两个请求之间的每个组件的状态?

但是我想我们还可以使状态requestScoped,所以这两个请求,在此期间将不缓存在应用服务器上的数据,对不对?我是否正确地得到它?

[我的应用程序中包含有大量的文字斑点这将是非常昂贵的高速缓存用户的博客文章。但是是有一些数据需要缓存! ]

回答

4

你在这里提到的句子是关于JSF状态保存,它保存了组件树的状态。默认情况下,这是在服务器上完成的......但你也可以在客户端上完成,以节省一些记忆。看到这一点:http://wiki.glassfish.java.net/Wiki.jsp?page=JavaServerFacesRI#section-JavaServerFacesRI-WhatAreTheDifferencesBetweenServerAndClientSideStateSavingAndWhatAreTheBenefitsDrawbacksOfEach

支持Bean范围是另一回事。你可以做后台bean会话/请求/视图作用域(甚至使用另一个或自定义作用域)。这将对服务器内存使用量产生影响。但是,如果您做得正确并且没有大数据要求,那么您可以管理它。例如,您可以尽可能少存储并定期重新加载数据(从db,...)。

这一切并不意味着你的数据缓存(至少不是从数据持久性存储来)。这取决于你。

因此,内存需求是值得关注的。完整的Java EE服务器的基本设置通常比apache服务器上的php应用程序更多......但是,正确完成,使其更快/更好/更具可扩展性(cpu/mem)可能更容易实现。

+0

那么我怎样才能使它成为无状态的,这样数据(状态)就不会存储在请求之间了?否则,如果我离开它,那么数据将被缓存正确吗?我正在寻找混合一些状态将被存储的数据和一些其状态不会被存储的数据。 – 2011-03-26 21:15:27

+0

我预计,如果我限制支持豆requestscoped的范围则不会被存储在两个请求 – 2011-03-26 21:17:57

+1

之间的状态。如果用数据,你刚才的意思是“我从数据库中检索”,那么它无关,与JSF和高速缓存不会在那里发生。如果你把一些东西(来自db的数据?)放在一个托管bean属性中,它的作用域就是bean本身的作用域。另外,不要试图过度优化。如果您必须在每个请求中重新加载相同的数据,请考虑将该数据存储在会话中(或某个中间范围)。无论如何,你不是在混合使用JSF状态保存(组件树)和托管bean作用域吗? – ymajoros 2011-03-26 21:35:05

1

在去年我不得不创建两个JSF应用程序。如果我没有记错的话,你可以将数据缓存在你的Backing Bean中,这样你就不会在每次刷新时都访问数据库来检索你的博客内容。

JSF有非常强大的服务器 - 客户端存在。很难想象JSF只能运行在像GWT这样的客户端上。

您是否使用IceFaces或其他任何类似RichFaces的JSF实现?

+0

我期待着为社交网络应用程序选择一个组件库..你有什么建议吗?我更倾向于primefaces和richfaces – 2011-05-25 04:05:36

+0

primefaces是最老的jsf2 lib,并且有很多组件 – ymajoros 2011-05-25 20:00:39

相关问题