我正在研究Weblogic 10.3.2,JSF 1.2,Richfaces 3.3.2和Facelets 1.1.14。
我遇到了严重的性能问题,特别是显示我的主页,其中包含一个非常复杂的丰富:datatable。在本地服务器上部署应用程序时,请求可能需要5秒钟才能完成。
主页是一个ui:一个简单模板的组合(问题不在模板中,其他页面相当快),但组成本身很大(~1000行)。
该页面有两个部分,下半部分是一个复杂的数据表,我使用多个 rich:subTable 和呈现的属性的组合实现了rowspan。可以看到所遵循的方法in this Richfaces forum discussion。
页面的上半部分包含数据表的过滤器列表。我不在rich:datatable标头中使用过滤器,因为我想要以下面的方式。
如果按下“添加”按钮,则会发生AJAX请求(a4j:commandButton)以将另一个Filter对象添加到后备集合,然后使用a4j重新呈现过滤器:重复(不是数据表)。
按下“搜索”按钮时,“富”:数据表仅 重新呈现。
我的页面代码位于帖子的末尾(某些字段已重命名)。
观察:
修改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!
您可以看到应用请求值大约需要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毫秒。
问题:
如何才能让网页更快?
代码:in PasteBin
答案 0 :(得分:2)
你有一个非常复杂的组件树,有多个大表,所有这些表都放在一个<h:form>
中。每当你提交一些与某个表/字段组相关的东西时,那么中的所有
页面将被提交,也是特定请求显然不感兴趣的值。
我认为如果您将“大表单”拆分为几个较小的表单,只包含特定请求的调用操作真正感兴趣的字段,那将会有很大帮助。
答案 1 :(得分:1)
答案 2 :(得分:0)
我们遇到了完全相同的问题。最后我们意识到这是因为简单的页面加载在页面加载本身花费了更多的时间。
事实证明,这是因为简单的JS加载HTTP请求需要很长时间,而且它不是来自CDN。
我们通过将JS移出部署战并在JBoss上启用压缩来修复它。
以下是关于我们如何修复它的详细博客文章:
http://tudip.blogspot.in/2012/03/how-to-really-improve-jsfrichfaces.html
希望它有所帮助。