【问题标题】:JSF - RichFaces performance problems showing complex pageJSF - RichFaces 显示复杂页面的性能问题
【发布时间】:2011-04-15 02:21:54
【问题描述】:

我正在开发 Weblogic 10.3.2、JSF 1.2、Richfaces 3.3.2 和 Facelets 1.1.14。

我有一个严重的性能问题,特别是显示我的主页,其中包含一个非常复杂的 rich:datatable。在我的本地服务器上部署应用程序时,一个请求可能需要 5 秒以上才能完成。

主页是一个 ui:composition 的简单模板(问题不在模板中,其他页面相当快),但合成本身很大(约 1000 行)。

页面有两个部分,下半部分是一个复杂的数据表,其中我使用多个 rich:subTablerendered 属性的组合实现了行跨度。后面的方法可以看in this Richfaces forum discussion

页面的上半部分包含数据表的过滤器列表。我不在 rich:datatable 标题中使用过滤器,因为我想要以下方式的东西。

如果按下 Add 按钮,则会发生 AJAX 请求 (a4j:commandButton) 以将另一个 Filter 对象添加到支持集合中,然后使用 a4j:repeat ( 重新呈现 filters不是数据表)。

rich:datatable 在按下“搜索”按钮时重新呈现。

我的页面代码在文末(部分字段已重命名)。

观察:

修改BalusC's Debug Phase Listener,我可以看到每个阶段需要多少。这是按下“添加”按钮时的请求,其中仅呈现数据表上方的过滤器。

2010-09-21 11:23:41,235 - Processing new Request!
2010-09-21 11:23:41,235 - before - RESTORE_VIEW 1
2010-09-21 11:23:41,235 - after - RESTORE_VIEW 1
2010-09-21 11:23:41,251 - before - APPLY_REQUEST_VALUES 2
2010-09-21 11:23:41,454 - getRowData-16: 84,026 ms
Home Page Query-16: 58,178 ms
2010-09-21 11:23:42,360 - after - APPLY_REQUEST_VALUES 2
2010-09-21 11:23:42,360 - before - PROCESS_VALIDATIONS 3
2010-09-21 11:23:42,438 - getRowData-16: 0,005 ms
2010-09-21 11:23:43,126 - after - PROCESS_VALIDATIONS 3
2010-09-21 11:23:43,126 - before - UPDATE_MODEL_VALUES 4
2010-09-21 11:23:43,188 - getRowData-16: 0,005 ms
2010-09-21 11:23:43,938 - after - UPDATE_MODEL_VALUES 4
2010-09-21 11:23:43,938 - before - INVOKE_APPLICATION 5
2010-09-21 11:23:43,938 - after - INVOKE_APPLICATION 5
2010-09-21 11:23:43,954 - before - RENDER_RESPONSE 6
2010-09-21 11:23:44,282 - getRowData-16: 0,007 ms
2010-09-21 11:23:45,173 - after - RENDER_RESPONSE 6
2010-09-21 11:23:45,173 - Done with Request!

您可以看到 Apply Request Values 大约需要 0.8s,Process Validations 大约需要 0.8s,Update Model 需要 0.8s,Invoke Application(业务逻辑发生的地方)需要的时间可以忽略不计,最后是 Render响应时间为 0.9 秒。

当我注释掉 rich:datatable 并且只显示过滤器时,渲染速度明显更快:

2010-09-21 11:50:52,780 - Processing new Request!
2010-09-21 11:50:52,780 - before - RESTORE_VIEW 1
2010-09-21 11:50:52,780 - after - RESTORE_VIEW 1
2010-09-21 11:50:52,780 - before - APPLY_REQUEST_VALUES 2
2010-09-21 11:50:52,858 - after - APPLY_REQUEST_VALUES 2
2010-09-21 11:50:52,858 - before - PROCESS_VALIDATIONS 3
2010-09-21 11:50:52,920 - after - PROCESS_VALIDATIONS 3
2010-09-21 11:50:52,920 - before - UPDATE_MODEL_VALUES 4
2010-09-21 11:50:52,967 - after - UPDATE_MODEL_VALUES 4
2010-09-21 11:50:52,967 - before - INVOKE_APPLICATION 5
2010-09-21 11:50:52,967 - after - INVOKE_APPLICATION 5
2010-09-21 11:50:52,983 - before - RENDER_RESPONSE 6
2010-09-21 11:50:53,186 - after - RENDER_RESPONSE 6
2010-09-21 11:50:53,186 - Done with Request!

整个请求只用了 400 毫秒。

问题:

  1. 此性能问题是 JSF 组件树问题吗?
  2. 我不认为将页面分解为其他 ui:compositions 会有所帮助。我相信这会产生一个相同的 JSF 组件树。
  3. 如何使页面更快?

    代码:in PasteBin

【问题讨论】:

    标签: java performance jsf richfaces


    【解决方案1】:

    您有一个非常复杂的组件树,其中包含多个大表,所有表都种植在一个 <h:form> 中。每当您提交与某个表/字段组相关的一些东西时,然后 everything 在 页面将被提交,以及特定请求显然不感兴趣的值。

    我认为,如果您将大表单拆分为几个较小的表单,其中仅包含对特定请求的调用操作真正感兴趣的字段,将会有很大帮助。

    【讨论】:

      【解决方案2】:

      我发现 Dan Allen(Seam in Action)的几篇文章中肯:

      Part1

      Part2

      【讨论】:

      • 如果您添加一个您所做更改的摘要以及它对每次更改的影响,那就太好了。
      【解决方案3】:

      我们遇到了完全相同的问题。最后我们意识到这是因为简单的页面加载在页面加载本身上花费了更多时间。

      原来是因为简单的JS加载HTTP请求耗时长,而且不是从CDN出来的。

      我们通过将 JS 移出部署战争并在 JBoss 上启用压缩来修复它。

      这里有一篇关于我们如何修复它的详细博客文章:

      http://tudip.blogspot.in/2012/03/how-to-really-improve-jsfrichfaces.html

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-15
        • 2012-10-13
        • 2010-10-27
        • 2012-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多