Как повысить производительность элемента управления RichFaces ScrollableDataTable?

Во-первых, немного предыстории:

Я показываю набор данных с 288 строками и 8 столбцами (2304 записи) с помощью ScrollableDataTable, и производительность оставляет желать лучшего. Запрос AJAX, который повторно отрисовывает элемент управления, занимает почти 20 секунд по сравнению с 7 секундами при отображении тех же данных с использованием элемента управления DataTable.

Метрики, полученные с помощью фильтров сервлетов и JavaScript, показывают, что практически все время обработки тратится на стороне клиента. Из 19,87-секундного запроса на сервер тратится 3,87 секунды... и менее 0,6 секунды тратится на запросы и сортировку данных.

Переключение на элемент управления DataTable сокращает цикл запроса, ответа и рендеринга до 1/3 того, что я вижу с помощью ScrollableDataTable, но также удаляет несколько важных функций.

А теперь вопрос:

У кого-нибудь еще были проблемы с производительностью ScrollableDataTable? Каков наиболее эффективный способ рендеринга больших объемов табличных данных в JSF/RichFaces с закрепленными столбцами и двухосевой прокруткой?

Обновление:

В итоге мы написали пользовательский элемент управления. Полный контроль над визуализируемыми компонентами и сгенерированным JavaScript позволил нам добиться времени отклика, сравнимого с DataTable. Я согласен с Заком, хотя разбиение на страницы - правильный ответ.


person Chris Hall    schedule 17.09.2008    source источник


Ответы (3)


Узкое место, скорее всего, находится на этапе «Render Response» жизненного цикла JSF. Он пытается отобразить слишком много компонентов для представления одновременно.

Мое предложение состоит в том, чтобы использовать пагинацию. Это должно значительно повысить вашу производительность, потому что за раз отрисовываются меньшие части представления.

Убедитесь, что ваш rich:dataTable имеет установленное свойство rows, а также - если вы выполняете какую-либо фильтрацию столбцов - убедитесь, что таблица дат также имеет свойство reRender="paginator", где paginator - это ваш rich:datascroller.

person Zack Marrapese    schedule 04.12.2008

У меня были подобные проблемы давным-давно, и в итоге я написал апплет для отображения данных, которые взаимодействовали со страницей, используя livescript. Мои проблемы с производительностью были такими же, как и то, что вы видели. Клиенту потребовалось более 30 секунд для отображения данных таблицы, а сервер изменил мой ответ менее чем за 2 секунды.

person Heath Borders    schedule 17.09.2008

Это звучит как ошибка в javascript, созданном для отображения таблицы. Пробовали ли вы страницу в разных браузерах? Какую реализацию JSF вы используете (RI или MyFaces или что-то еще)?

person Ian McLaird    schedule 08.10.2008