Для начала немного предыстории:
Я показываю набор данных с 288 строками и 8 столбцами (2304 записи) с помощью ScrollableDataTable, и производительность оставляет желать лучшего. Запрос AJAX, который повторно отображает элемент управления, занимает около 20 секунд по сравнению с 7 секундами при визуализации тех же данных с использованием элемента управления DataTable.
Метрики, полученные с помощью фильтров сервлетов и JavaScript, показывают, что практически все время обработки тратится на стороне клиента. Из 19,87-секундного запроса на сервер тратится 3,87 секунды ... менее 0,6 секунды - на запросы и сортировку данных.
Переключение на элемент управления DataTable сокращает цикл запроса, ответа и рендеринга до 1/3 от того, что я вижу с помощью ScrollableDataTable, но также удаляет несколько важных функций.
А теперь вопрос:
Кто-нибудь еще испытывал проблемы с производительностью с ScrollableDataTable? Какой самый эффективный способ визуализировать большие объемы табличных данных в JSF / RichFaces с закрепленными столбцами и двухосной прокруткой?
Обновлять:
В итоге мы написали настраиваемый элемент управления. Полный контроль над визуализированными компонентами и сгенерированным JavaScript позволил нам достичь времени отклика, сопоставимого с DataTable. Я согласен с Заком - правильное решение - разбиение на страницы.





У меня были похожие проблемы давным-давно, и в итоге я написал апплет для отображения данных, которые взаимодействовали со страницей с помощью livescript. Мои проблемы с производительностью были такими же, как и вы. Клиенту потребовалось более 30 секунд для визуализации данных таблицы, а сервер обработал мой ответ менее чем за 2 секунды.
Это похоже на ошибку в javascript, созданном для визуализации таблицы. Вы пробовали страницу в разных браузерах? Какую реализацию JSF вы используете (RI или MyFaces или что-то еще)?
Скорее всего, узкое место находится на этапе «Ответ на рендеринг» жизненного цикла JSF. Он пытается отобразить слишком много компонентов для представления одновременно.
Я предлагаю использовать разбиение на страницы. Это должно значительно повысить вашу производительность, поскольку визуализирует меньшие части представления за раз.
Убедитесь, что для вашего rich:dataTable установлено свойство rows, а также - если вы выполняете фильтрацию столбцов - убедитесь, что таблица дат также имеет свойство reRender = "paginator", где paginator - это ваш rich:datascroller.