Como posso melhorar o desempenho do controle RichFaces ScrollableDataTable?
Pergunta
Primeiro, um pouco de fundo:
Eu estou exibindo um conjunto de dados com 288 linhas e 8 colunas (2304 registros) usando um ScrollableDataTable e as folhas de desempenho muito a desejar. solicitação de um AJAX que renderiza novamente o controle leva cerca de 20 segundos para completar, em comparação com 7 segundos ao renderizar os mesmos dados usando um controle DataTable.
Metrics capturados através de filtros Servlet e JavaScript mostram que praticamente todo o tempo de processamento é gasto no lado do cliente o. De um segundo pedido 19.87, 3.87 segundos é gasto com o servidor ... com menos de .6 segundos consulta passou e classificar os dados.
A mudança para um controle DataTable corta o pedido, resposta e prestar ciclo de até 1/3 do que eu estou vendo com o ScrollableDataTable, mas também remove várias características importantes.
E agora a pergunta:
Tem mais alguém experimentou problemas de desempenho com o ScrollableDataTable? Qual é a maneira mais eficiente de se tornar grandes quantidades de dados tabulares em JSF / RichFaces com colunas fixadas e dois eixos de rolagem?
Update:
Nós acabou escrevendo um controle personalizado. Controle total sobre os componentes prestados e gerou JavaScript permitiu-nos alcançar um tempo de resposta comparável à DataTable. Concordo com Zack embora - paginação é a resposta correta ??p>.
Solução
O gargalo é mais provável no "Render Response" fase do ciclo de vida do JSF. Ele está tentando tornar demasiados componentes para a visão de uma vez.
A minha sugestão é usar a paginação. Deve aumentar significativamente o seu desempenho porque está tornando porções menores da visão de cada vez.
Certifique-se de que o seu rich:dataTable
tem o conjunto de propriedades rows
e também - se você estiver fazendo qualquer coluna de filtragem -. Certificar-se de que a tabela de data também tem o reRender="paginator"
propriedade onde paginador é o seu rich:datascroller
Outras dicas
Eu tive problemas semelhantes há muito tempo e acabou escrevendo um applet para exibir os dados que interagiram com a página usando LiveScript. Meus problemas de desempenho foram os mesmos que o que estava vendo. O cliente levou mais de 30 segundos para renderizar os dados da tabela, eo servidor virou a minha resposta em torno de menos de 2 segundos.
Isso soa como um bug no javascript produzidos para compor a mesa. Já experimentou a página em diferentes navegadores? Qual implementação JSF você está usando (RI ou MyFaces ou outra coisa)?