Как улучшить производительность элемента управления RichFaces ScrollableDataTable? - PullRequest
5 голосов
/ 17 сентября 2008

Сначала немного фона:

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

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

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

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

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

Обновление:

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

Ответы [ 3 ]

1 голос
/ 04 декабря 2008

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

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

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

0 голосов
/ 08 октября 2008

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

0 голосов
/ 18 сентября 2008

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

...