Dicas para carga rápida de um rich:DataTable?

Bom dia, colegas

Estou com um gargalo no meu xhtml quando um botão dispara um evento para popular um rich:datatable.

Localmente quando o Datatable é carregado, a impressão é que está funcionando bem.
Mas em produção, através da rede, já cheguei a ver cada célula do Datatable sendo carregado no brownser.
Minha infra-estrutura está ok. O problema é na aplicação.

Preciso de dicas para otimizar essa minha aplicação.

Um forte abraço a todos.

				<!-- DataTable - Atendimentos não analisados - Início -->
				
						<rich:dataTable  id="dataTableAtendimentosNaoAnalisados" 
										 value="#{atendimentoNaoAnalisadoBEAN.atendimentoList}" 
						 		         var="atendimento" >	
							<rich:column>
								<f:facet name="header">
									<h:outputText value="Nº Atend."/>
								</f:facet>
							
								<h:outputText value="#{atendimento.numeroAtendimento}" />					
							</rich:column>
											
							<rich:column>
								<f:facet name="header">
									<h:outputText value="Beneficiário"/>
								</f:facet>

								<h:outputText value="#{atendimento.beneficiarioAtendimento.codigoBeneficiario} - 
													 #{atendimento.beneficiarioAtendimento.nomebeneficiairo}" />					
							</rich:column>
						
							<rich:column>
								<f:facet name="header">
									<h:outputText value="Data Atend."/>
								</f:facet>
							
								<h:outputText value="#{atendimento.dataAtendimento}" />					
							</rich:column>
						
							<rich:column>
								<f:facet name="header">
									<h:outputText value="Procedimento"/>
								</f:facet>
							
								<h:outputText value="#{atendimento.procedimentoAtendimento.procedimentoCodigoDescricao}" />					
							</rich:column>
						
							<rich:column>
								<f:facet name="header">
									<h:outputText value="Tipo Proc."/>
								</f:facet>
							
								<h:outputText value="#{atendimento.procedimentoAtendimento.tipoServicoProcedimento}" />					
							</rich:column>
						
							<rich:column>
								<f:facet name="header">
									<h:outputText value="Qtde"/>
								</f:facet>
							
								<h:outputText value="#{atendimento.procedimentoAtendimento.quantidadeProcedimento}" />					
							</rich:column>
						
							<rich:column>
								<f:facet name="header">
									<h:outputText value="Valor"/>
								</f:facet>
							
								<h:outputText value="#{atendimento.procedimentoAtendimento.valorProcedimento}" />					
							</rich:column>
						
							<rich:column>
								<f:facet name="header">
									<h:outputText value="Nº Autorização"/>
								</f:facet>
							
								<h:outputText value="#{atendimento.numeroAutorizacaoAtendimento}" />					
							</rich:column>
						
							<rich:column>

								<a4j:form>	
	
									<a4j:commandLink value="#{atendimentoNaoAnalisadoBEAN.commandLinkTitulo}" 
									action="#{atendimentoNaoAnalisadoBEAN.commandLinkClick}" 
									id="commandLink"
									reRender="commandLink,commandLink2">
									
										<f:setPropertyActionListener value="#{atendimento}" 
										target="#{atendimentoNaoAnalisadoBEAN.atendimento}">
										
										</f:setPropertyActionListener>
									
									</a4j:commandLink>
	
								</a4j:form>
							</rich:column>			
							
							<rich:column>
								<h:form>
									<h:commandLink id="commandLink2" 
												   value="#{atendimentoNaoAnalisadoBEAN.commandLink2Titulo}"
												   action="glosarAtendimento" 
												   disabled="#{atendimentoNaoAnalisadoBEAN.commandLink2Desabilitado}">
												   
												   <f:setPropertyActionListener target="#{atendimentoGlosarBEAN.atendimento}" 
												   value="#{atendimento}"></f:setPropertyActionListener>
											
									</h:commandLink>
								</h:form>
							</rich:column>							
													
							<rich:column>
								<a4j:form>	
									<h:commandLink value="Visualizar Informações" 
									id="commandLinkVisualizarInformacoes"
									action="informacoes">
									
										<f:setPropertyActionListener value="#{atendimento}" 
										target="#{informacoesAtendimentoNaoAnalisadoBEAN.atendimento}"></f:setPropertyActionListener>
									
									</h:commandLink>
							</a4j:form>
								
							</rich:column>						
							
						</rich:dataTable>
						
						
				<!-- DataTable - Atendimentos não analisados - Final -->	

mostre da onde você está obtendo os dados para polular o dataTable… precisamos verificar a chamados do metodo e a acesso a dados.

seria interressante você fazer um binding no datatable para pode obter por exemplo linha selecionada e tal…

exemplo:

<rich:dataTable id=“carteiraFundos” value="#{ManterSimulacao.listarFundos}" var=“fundo” binding="#{ManterSimulacao.table}">
rich:column

</rich:column>
</rich:dataTable>

classe

private HtmlDataTable table = new HtmlDataTable;

public HtmlDataTable getTable() {
return table;
}

public void setTable(HtmlDataTable table) {
    this.table = table;

}

//Obtem a linha selecionada no dataTable
public Fundo getLinha() {
Fundo fundo = (Fundo) table.getRowData();
return fundo;
}

não que va melhorar a performance do seu codigo esse binding mais provavelmente mais tarde você queira ampliar ele como remover linha, inserir linha etc… por isso é uma opcao.

outra coisa …

não sei se estou falando abobrinha mais experiência propria o rich:dataTable é um pouco mais lento que o h:dataTable não sei lhe dizer o motivo. Mais mesmo assim eu uso ele, aliais gosto muito :slight_smile: acho mais elegante.

Estou com um problema parecido,

estou com uma tabela em postgres com +10mil registros, e quando procuro abrir uma tela com um datatable listando todos os registros, fica muito lento, e quando filtro usando o facet das colunas fica mais lento ainda…

pergunto, é possível otimizar meu select, ou fazendo com que ele leia apenas de 10 em 10, que seria o número de linhas do table? a cada página, uma nova busca no banco com os próximos 10 registros, assim por diante…

se alguém tiver alguma idéia, obrigado.

tentar otimizar o select conserteza é uma das opções… mais vocÊ pode tambem tentar usar um componente do richfaces com paginação de dados para tentar amenizar o problema.

paginação de dados seria o datascroller? dividir em numero de linhas, configurado, e em páginas os resultados? o select ja buscamos os campos necessarios…o maior problema mesmo eh quando filtramos atraves do facet header do columm que dae demora muito. queria saber se tem como melhor esse datatable do rich para nao trazer todo select, ou ter varios selects, por pagina, algo assim

obrigado