【问题标题】:Slowness with with multiple ui:includes多个 ui 的缓慢性:包括
【发布时间】: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:panelGroupsui:includes,那么该站点真的很快(1 到 2 秒响应)。据我所知,ui:includes 中的所有页面以及它们使用的 bean 都被实例化了。

我们可以做些什么来加快速度?我们在树脂 4.0.32 和 primefaces 3.5 上使用 mojarra 2.1.13。

谢谢。

【问题讨论】:

  • 我建议你使用custom facelet tags 而不是&lt;ui:include&gt;。使用 JSF 逻辑包含整个页面可能会给您带来问题,因为它们是在构建页面时包含的,而不是在呈现页面时包含的。 Look at the problem I experienced with a @ViewScoped bean.
  • 我遇到了同样的问题,这就是为什么我选择了h:panelGrouprendered 而不是动态的ui:include。我将不得不查看自定义 facelet 标记。

标签: jsf-2 primefaces mojarra


【解决方案1】:

您有任何自定义上下文参数吗?错误的值会显着影响性能。

您可以尝试在 web.xml 中禁用 facelets 刷新:

<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>

这两个设置应该始终在生产环境中使用。

【讨论】:

    猜你喜欢
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    相关资源
    最近更新 更多