Как я могу улучшить производительность элемента управления RichFaces Scrollabledatable?
Вопрос
Во-первых, небольшая предыстория:
Я отображаю набор данных с 288 строками и 8 столбцами (2304 записи), используя Scrollabledatable, и производительность оставляет желать лучшего.Выполнение AJAX-запроса, который повторно отправляет элемент управления, занимает почти 20 секунд по сравнению с 7 секундами при рендеринге тех же данных с использованием элемента управления DataTable.
Показатели, полученные с помощью фильтров сервлетов и JavaScript, показывают, что практически все время обработки тратится на стороне клиента.Из 19,87 секундного запроса на сервере тратится 3,87 секунды...на запрос и сортировку данных было потрачено менее 0,6 секунды.
Переключение на элемент управления DataTable сокращает цикл запроса, ответа и рендеринга до 1/3 от того, что я вижу с помощью ScrollableDataTable, но также удаляет несколько важных функций.
А теперь вопрос:
У кого-нибудь еще возникали проблемы с производительностью при использовании ScrollableDataTable?Какой наиболее эффективный способ визуализации больших объемов табличных данных в JSF / RichFaces с закрепленными столбцами и двухосевой прокруткой?
Обновить:
В итоге мы написали пользовательский элемент управления.Полный контроль над визуализируемыми компонентами и сгенерированным JavaScript позволил нам добиться времени отклика, сравнимого с данными DataTable.Однако я согласен с Заком - разбивка на страницы - это правильный ответ.
Решение
Узкое место, скорее всего, находится на этапе "Render Response" жизненного цикла JSF.Он пытается отобразить слишком много компонентов для представления одновременно.
Мое предложение состоит в том, чтобы использовать разбивку на страницы.Это должно значительно повысить вашу производительность, поскольку одновременно рендерит меньшие части представления.
Будьте уверены, что ваш rich:dataTable
обладает rows
набор свойств, а также - если вы выполняете какую-либо фильтрацию столбцов - убедитесь, что таблица дат также имеет это свойство reRender="paginator"
где находится ваш пагинатор rich:datascroller
.
Другие советы
Давным-давно у меня были похожие проблемы, и в итоге я написал апплет для отображения данных, которые взаимодействовали со страницей с помощью livescript.Мои проблемы с производительностью были такими же, как и то, что вы видели.Клиенту потребовалось более 30 секунд, чтобы отобразить данные таблицы, а сервер обработал мой ответ менее чем за 2 секунды.
Это звучит как ошибка в javascript, созданном для рендеринга таблицы.Вы пробовали использовать эту страницу в разных браузерах?Какую реализацию JSF вы используете (RI, MyFaces или что-то еще)?