JSF Melhorar desempenh

Olá pessoal, quero melhorar o desempenho do meu site é acredito que isso, seja o desejo de muitos desenvolvedores Web,
estou usando JSF, PrimeFaces, CDI e JPA

Minha intenção neste Forum é discutir sobre o desempenho (Performasse) , perguntado para saber d queme já passo por isso
quais as melhores praticas para melhorar de desempenho.

Minha contribuição: Por Default o JPA e “FetchType.EAGER” ou seja quando executamos HQL, no banco de dados “select u from Usuario u” ele faz sub consultas em todas as classes relacionadas a "Usuario"
ou seja junto ao usuário vem o endereço, nacionalidade, e todas informações do usuário, gostaria de saber o custo disso, “Isso pode deixa a aplicação Lenta ?”

FORA DA PERGUNTA>> Quando fazemos consultas no banco de dados usando o mapeamento de objetos, trazemos os Objetos com seus atributos preenchidos, mandamos eles para a tela sem nem um tratamento
ou seja.
Sé buscarmos um usuário no banco é ele possuir um lista com um linhão de registros e mandarmos ele ser apresentado na tela ira levar todos esses registros com ele. é pode ser que nem usemos todos esses registros isso deixa o sistema mais lento. Não vemos a lista no código montado pela JSF, mas ele esta la no HTTP Request

Essa foi minha contribuição quero levantar mais discussões como essa

Boa a noite alcirBarros, tudo bom?

Então amigo, estou desenvolvendo um aplicativo utilizando JSF, Hibernate, JPA, Primefaces e tudo mais. Desenvolvi uma tela de cadastro onde tenho 1 dataTable, 1 selectOneMenu e 1 selectCheckboxMenu. Acredito que para popular esses componentes bastaria um select para cada um, no entanto, somando as consultas para os 3 componentes, contei 30 linhas de consultas no Log do Hibernate no momento que a tela é carregada.

Alguém teria alguma dica para eu otimizar essas consultas??

Muito obrigado

Estou realizando alguns testes e estou reparando o seguinte:

O meu dataTable está do seguinte modo:

     <p:dataTable id="professores" var="professor" emptyMessage="Não existem professores cadastrados" 
                  value="#{ProfessorController.lista}" rowKey="#{professor.id}" 
                  selectionMode="single" selection="#{ProfessorController.professorSelecionado}" 
                  paginator="true" rows="10">  

Percebi que o meu getLista está sendo acessado 6 vezes, logo executa as mesmas consultas 6 vezes.

Alguém teria alguma idéia?

Pessoal,

Achei algumas dicas interessantes aqui mesmo no fórum, segue o link!

http://www.guj.com.br/java/284342-resolvido-primefaces-341—datatable-com-paginacao-muito-lenta

[quote=marcelo1987]Boa a noite alcirBarros, tudo bom?

Então amigo, estou desenvolvendo um aplicativo utilizando JSF, Hibernate, JPA, Primefaces e tudo mais. Desenvolvi uma tela de cadastro onde tenho 1 dataTable, 1 selectOneMenu e 1 selectCheckboxMenu. Acredito que para popular esses componentes bastaria um select para cada um, no entanto, somando as consultas para os 3 componentes, contei 30 linhas de consultas no Log do Hibernate no momento que a tela é carregada.

Alguém teria alguma dica para eu otimizar essas consultas??

Muito obrigado[/quote]

Olá Marcelo, olha só esse caso que você esta relatando parece ser um tipico caso de uso de metodos “Get” indevidamente
pora uma melhor Performasse não devemos ter instruções SQL dentro dentro de Get nem de Laços explo “FOR”

[quote=alcirBarros][quote=marcelo1987]Boa a noite alcirBarros, tudo bom?

Então amigo, estou desenvolvendo um aplicativo utilizando JSF, Hibernate, JPA, Primefaces e tudo mais. Desenvolvi uma tela de cadastro onde tenho 1 dataTable, 1 selectOneMenu e 1 selectCheckboxMenu. Acredito que para popular esses componentes bastaria um select para cada um, no entanto, somando as consultas para os 3 componentes, contei 30 linhas de consultas no Log do Hibernate no momento que a tela é carregada.

Alguém teria alguma dica para eu otimizar essas consultas??

Muito obrigado[/quote]

Olá Marcelo, olha só esse caso que você esta relatando parece ser um tipico caso de uso de metodos “Get” indevidamente
pora uma melhor Performasse não devemos ter instruções SQL dentro dentro de Get nem de Laços explo “FOR” [/quote]

Boa tarde alcirBarros,

No meu get não existe nenhuma instrução SQL nem laço FOR, pelo que eu tenho visto nos meus estudos é que realmente no JSF os get’s são executados diversas vezes ao se carregar uma página, porém, a minha consulta só havia a necessidade de ser executada uma única vez. Abaixo segue a o get da minha variável “lista”, após ser alterada, dessa forma a consulta só é executada uma única vez:

    public DataModel getLista() {
        
        if(lista == null || lista.getRowCount() == 0){
        
                if(this.ativoInativo){

                    lista = new ListDataModel(consulta.listaProfessorAtivo(professor));
                }else{

                    lista = new ListDataModel(professorDAO.listar(professor));
                }        
        
        }
        
        return lista;
    }