我们有一个页面,其中主要内容区域由ui:includes
控制,基本上我们有一个h:panelGroup
条件rendered
和ui:include
。
像这样:
<h:panelGroup rendered="#{bean.page.id eq bean.page1ID}">
<ui:include src="page.xhtml"/>
</h:panelGroup>
我们有大约10个。每个页面都非常复杂,有一些自己的bean。我们执行渲染技巧而不是动态ui:include
的原因是因为存在一个错误,@ViewScoped
在ui:include
之外使用的bean在ui:include
内被重新实例化因而导致各种各样的问题。
每当我们执行某些操作时,执行操作需要几秒钟(通常为7到15次)。例如,当我们更改bean.page
属性并请求渲染时。即使我们做了一些简单的事情,比如保存一个几乎不涉及任何其他东西的价值,它实际上很慢。如果我删除了除{1}之外的所有h:panelGroups
和ui:includes
,那么该网站真的很快(1到2秒响应)。据我所知,ui:includes
中的所有页面以及它们使用的bean都被实例化了。
我们可以做些什么来加快速度?我们在树脂4.0.32和primefaces 3.5上使用mojarra 2.1.13。
感谢。
答案 0 :(得分:1)
您有自定义上下文参数吗?错误的价值会对绩效产生重大影响。
您可以尝试在web.xml
:
<context-param>
<param-name>facelets.REFRESH_PERIOD</param-name>
<param-value>-1</param-value>
</context-param>
将此值设置为-1将禁用内部检查视图声明更改。这意味着您无法在不重新部署的情况下重新加载xhtml页面,但这也意味着更高的性能。
或者,您也可以尝试将项目阶段设置为Production
(这应包括其他参数)。这会禁用许多额外的检查和开发用的东西:
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Production</param-value>
</context-param>
这两个设置应始终在高效环境中使用。