Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF-RichFaces在显示复杂页面时面临性能问题_Java_Performance_Jsf_Richfaces - Fatal编程技术网

Java JSF-RichFaces在显示复杂页面时面临性能问题

Java JSF-RichFaces在显示复杂页面时面临性能问题,java,performance,jsf,richfaces,Java,Performance,Jsf,Richfaces,我正在研究WebLogic10.3.2、JSF1.2、Richfaces 3.3.2和Facelets 1.1.14 我有一个严重的性能问题,尤其是显示我的主页,其中包含一个非常复杂的rich:datatable。在本地服务器上部署应用程序时,完成请求可能需要5秒钟以上 主页是一个ui:一个简单模板的合成(问题不在模板中,其他页面的速度相当快),但合成本身是巨大的(约1000行) 页面有两个部分,下半部分是一个复杂的数据表,在这里我使用多个rich:subtable和rendered属性的组合实

我正在研究WebLogic10.3.2、JSF1.2、Richfaces 3.3.2和Facelets 1.1.14

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

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

页面有两个部分,下半部分是一个复杂的数据表,在这里我使用多个rich:subtable和rendered属性的组合实现了rowspan。可以看出所采用的方法

页面的上半部分包含datatable的筛选器列表。我不在rich:datatable标题中使用过滤器,因为我希望采用以下方式

如果按下Add按钮,则会发生AJAX请求(a4j:commandButton)将另一个筛选器对象添加到备份集合,然后使用a4j:repeat(而不是datatable)重新检索筛选器

rich:datatable仅在按下搜索按钮时重新显示

我的页面代码在文章的末尾(一些字段已被重命名)

意见:

修改后,我可以看到每个阶段需要多少时间。这是按下“添加”按钮时的请求,其中仅呈现datatable上方的过滤器

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!
您可以看到,应用请求值大约需要0.8秒,流程验证大约需要0.8秒,更新模型需要0.8秒,调用应用程序(业务逻辑发生的地方)需要的时间可以忽略不计,最后,呈现响应需要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毫秒

问题:

  • 这个性能问题是JSF组件树问题吗
  • 我不认为将页面分解成其他ui:compositions会有帮助。我相信这将导致一个相同的JSF组件树
  • 我可以做些什么来加快页面速度

    守则:


  • 您有一个相当复杂的组件树,其中包含多个大型表,所有这些表都放在一个
    中。每当您提交一些与某个表/字段组相关的内容时,那么 页面将被提交,同时还将提交对特定请求显然不感兴趣的值


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

    我发现Dan Allen(Seam in action)的几篇文章切中要害:


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

    事实证明,这是因为简单的JS加载HTTP请求花费了很长时间,而且它不是来自CDN

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

    下面是一篇关于我们如何修复它的详细博客文章:


    希望能有所帮助。

    如果您能添加您所做更改的摘要,以及它对每个更改的影响,那就太好了。