首先,一点背景:
我正在使用ScrollableDataTable显示包含288行和8列(2304条记录)的数据集,性能还有很多不足之处。重新启动控件的AJAX请求需要将近20秒才能完成,而使用DataTable控件渲染相同数据时需要7秒。
通过Servlet过滤器和JavaScript捕获的度量标准显示,几乎所有处理时间都花费在客户端。在19.87秒的请求中,在服务器上花费了3.87秒......用于查询和排序数据的时间少于0.6秒。
切换到DataTable控件会将请求,响应和渲染周期缩短到我在ScrollableDataTable上看到的1/3,但也会删除几个重要的功能。
现在的问题是:
是否有其他人遇到过ScrollableDataTable的性能问题?使用固定列和双轴滚动在JSF / RichFaces中呈现大量表格数据的最有效方法是什么?
更新
我们最终编写了一个自定义控件。完全控制渲染的组件和生成的JavaScript允许我们实现与DataTable相当的响应时间。我同意Zack的观点 - 分页是正确的答案。
答案 0 :(得分:1)
瓶颈很可能出现在JSF生命周期的“渲染响应”阶段。它试图一次为视图渲染太多组件。
我的建议是使用分页。它应该会显着提高您的性能,因为它一次渲染视图的较小部分。
确保您的rich:dataTable
设置了rows
属性,并且 - 如果您正在进行任何列过滤 - 请确保日期表还具有属性reRender="paginator"
paginator是你的rich:datascroller
。
答案 1 :(得分:0)
我很久以前遇到过类似的问题,最后编写了一个applet来显示使用livescript与页面交互的数据。我的表现问题与你所看到的一样。客户端花了30多秒来渲染表数据,服务器在不到2秒的时间内完成了我的响应。
答案 2 :(得分:0)
这听起来像是为了呈现表而生成的javascript中的错误。您是否在不同的浏览器中尝试过该页面?您使用哪种JSF实现(RI或MyFaces或其他)?