【发布时间】: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:subTable 和 rendered 属性的组合实现了行跨度。后面的方法可以看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 毫秒。
问题:
- 此性能问题是 JSF 组件树问题吗?
- 我不认为将页面分解为其他 ui:compositions 会有所帮助。我相信这会产生一个相同的 JSF 组件树。
-
如何使页面更快?
代码:in PasteBin
【问题讨论】:
标签: java performance jsf richfaces