代码之家  ›  专栏  ›  技术社区  ›  Markos Fragkakis

JSF-RichFaces显示复杂页面的性能问题

  •  2
  • Markos Fragkakis  · 技术社区  · 15 年前

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

    主页是一个ui:由一个简单的模板组成(问题不在模板上,其他页面的速度相当快),但组成本身是巨大的(大约1000行)。

    页面有两个部分,下面的部分是一个复杂的datatable,在这里我使用多个数据表的组合实现了rowspan 丰富:微妙 s和 提供 属性。所遵循的方法可见一斑 in this Richfaces forum discussion

    页面的上半部分包含datatable的筛选器列表。我不使用过滤器丰富:数据表标题,因为我想要下面的款式。

    alt text

    如果按下Add按钮,则会发出AJAX请求(a4j:commandButton)向backing集合添加另一个Filter对象,然后 过滤器 使用a4j重新渲染:重复( ).

    这个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!
    

    当我评出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

    3 回复  |  直到 15 年前
        1
  •  2
  •   BalusC    15 年前

    您有一个相当复杂的组件树,其中包含多个大型表,所有这些表都放在一个单独的目录中 <h:form> . 每当您提交与某个表/字段组相关的内容时 一切 页面将被提交,也价值观,这显然是不感兴趣的具体要求。

    我认为,如果将大表单拆分为几个小表单,只包含特定请求的invoke操作真正感兴趣的字段,会有很大帮助。

        2
  •  1
  •   Markos Fragkakis    15 年前

    我找到了Dan Allen(Seam in Action)的几篇文章,它们的观点是正确的:

    Part1

    Part2

        3
  •  0
  •   Tudip Technologies    14 年前

    结果发现,这是因为简单的JS加载HTTP请求花费了很长时间,而且它不是从CDN发出的。

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

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

    希望有帮助。