如何提高RichFaces ScrollableDataTable控件的性能?

时间:2020-03-05 18:59:37  来源:igfitidea点击:

首先,有一点背景:

我正在使用ScrollableDataTable显示具有288行和8列(2304条记录)的数据集,而性能还有很多不足之处。重新呈现控件的AJAX请求需要近20秒才能完成,而使用DataTable控件呈现相同数据时则需要7秒。

通过Servlet过滤器和JavaScript捕获的指标表明,实际上所有处理时间都花在了客户端上。在19.87秒的请求中,在服务器上花费的时间为3.87秒,而在查询和排序数据上所花费的时间不到.6秒。

切换到DataTable控件可以将请求,响应和呈现周期减少到使用ScrollableDataTable看到的内容的1/3,但是还删除了一些重要功能。

现在的问题是:

ScrollableDataTable是否还有其他人遇到过性能问题?用固定列和两轴滚动在JSF / RichFaces中呈现大量表格数据的最有效方法是什么?

更新:

我们最终编写了一个自定义控件。对呈现的组件和生成的JavaScript的完全控制使我们获得了与DataTable相当的响应时间。我同意Zack的观点,尽管分页是正确的答案。

解决方案

回答

我很久以前也遇到过类似的问题,最终编写了一个applet来显示使用livescript与页面交互的数据。我的性能问题与我们所看到的相同。客户端花费了30多秒钟来呈现表数据,而服务器在不到2秒的时间内改变了我的响应。

回答

这听起来像是产生的用于渲染表格的javascript中的错误。我们是否在其他浏览器中尝试过该页面?我们正在使用哪个JSF实现(RI或者MyFaces或者其他)?

回答

瓶颈很可能在JSF生命周期的"渲染响应"阶段。它试图一次为视图渲染太多组件。

我的建议是使用分页。它应该显着提高性能,因为它一次渲染了视图的较小部分。

确保rich:dataTable设置了rows'属性,并且-如果我们要进行任何列过滤-确保日期表还具有属性reRender =" paginator",其中paginator是rich :datascroller`。