Как повысить производительность элемента управления 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)


arrow_upward
1
arrow_downward

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

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

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

person Zack Marrapese    schedule 04.12.2008

arrow_upward
0
arrow_downward

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

person Heath Borders    schedule 17.09.2008

arrow_upward
0
arrow_downward

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

person Ian McLaird    schedule 08.10.2008