【发布时间】:2013-04-03 21:02:03
【问题描述】:
我们有一个页面,其中主要内容区域由ui:includes 控制,基本上我们有一个带有rendered 条件的h:panelGroup 和其中的ui:include。
像这样:
<h:panelGroup rendered="#{bean.page.id eq bean.page1ID}">
<ui:include src="page.xhtml"/>
</h:panelGroup>
我们有大约 10 个。每个页面都非常复杂,有一些自己的 bean。我们使用渲染技巧而不是动态ui:include 的原因是因为有一个错误,在ui:include 之外使用的@ViewScoped bean 在ui:include 内部重新实例化,从而导致各种问题。
任何时候我们执行某项操作都需要几秒钟(通常为 7 到 15 秒)才能执行该操作。例如,当我们更改 bean.page 属性并请求渲染时。即使我们做一些简单的事情,比如保存一个几乎不涉及其他任何东西的值,它也真的很慢。如果我删除除一个之外的所有h:panelGroups 和ui:includes,那么该站点真的很快(1 到 2 秒响应)。据我所知,ui:includes 中的所有页面以及它们使用的 bean 都被实例化了。
我们可以做些什么来加快速度?我们在树脂 4.0.32 和 primefaces 3.5 上使用 mojarra 2.1.13。
谢谢。
【问题讨论】:
-
我建议你使用custom facelet tags 而不是
<ui:include>。使用 JSF 逻辑包含整个页面可能会给您带来问题,因为它们是在构建页面时包含的,而不是在呈现页面时包含的。 Look at the problem I experienced with a@ViewScopedbean. -
我遇到了同样的问题,这就是为什么我选择了
h:panelGroup和rendered而不是动态的ui:include。我将不得不查看自定义 facelet 标记。
标签: jsf-2 primefaces mojarra