Melhor desempenho web

Fala galera,
Ultimamente tenho pego uns projetos pequenos para desenvolver, e tenho notado que algumas aplicações tem ficado um pouco lentas, eu tenho as desenvolvido sem nenhum framework utilizo Dao, e uso jstl para exibir dados nas paginas jsp, gostaria de uma opnião sobre qual framework ou metodologia seria a ideal para se aplicar e melhorar a performance dos meus projetos, pois pretendo pegar um projeto um pouco maior agora. Sei um pouco de hibernate, isso ajudaria no desempenho do meu projeto?? qual dos frameworks ajudaria e me daria maiores ganhos de performance??

Att Cyro Franco

Tem uma pseudo-regra que diz que quanto mais camadas, maior é a carga de processamento e consequentemente mais lento. Não existem frameworks milagrosos, mas alguns que ajudam em algumas parte (freemarker ou velocity na parte visual, principalmente). Se uma aplicação está lenta, quase posso afirmar que o problema está na sua lógica e não na linguagem. Nem sempre uso de DAO, Hibernate e outras metodologias e frameworks vão melhorar as coisas.

Construir aplicações web hoje sem o uso de um framework (pelo menos MVC), hoje em dia, eu acho muito ruim, pois tens uma perda de qualidade e produtividade significativa. Se for pensar em algum, procure dar uma olhada no VRaptor2 ou no Wicket, minha sugestão.

Sugiro também reavaliar sua lógica, pois essa sim pode estar dando problema, usando um profiler se preferir para verificar onde está o gargalo.

Até!

Valeu mesmo amigão pela ajuda, mas sua resposta me encheu de duvidas rsrsrs***

então posso dizer que a velocidade da aplicação está ligada diretamente a minha logica de programação… por exemplo se ao invés de utilizar o jstl para exibir meus dados eu utilizasse scriptless isso nao faria a menor diferença quanto a velocidade da minha aplicação, e se eu utilizasse struts daria no mesmo???

Esses frameworks que “colaboram” na velocidade da minha aplicação teem algum ganho significativo? ou apenas em aplicações de grande porte?

E o que seria um profiler???

O Vraptor e o Wicket seriam apenas para seguir um padrão de projeto o qual facilitaria a produtividadeda minha aplicação??

Por que é que sua aplicação está lenta? Algumas hipóteses (não dá para listar tudo):

a) Você faz só consultas bobas no banco mas ele está consumindo a maior parte do tempo da aplicação, porque não foram usados os índices adequados ou você usa “like” adoidado, para um problema que não precisa de “like” ou que precisaria de “full-text search” (por exemplo, você tem uma tabela com as descrições de 10000 produtos e você precisa consultar por palavras-chave quais os produtos que contém as palavras-chave passadas pelo usuário).
Normalmente o que eu vejo ocorrer é isso :stuck_out_tongue:

b) Você tem uma conexão muito lenta e a página (olhando o “source”) está ocupando, só de HTML, 100 KBytes.
Isso não é muito raro acontecer. Dê uma emagrecida nas suas páginas (usar CSS e deixar a página menos endentada é bom, não?)

c) Você usa um framework muito pesado com 900 camadas.
Se isso ocorrer, é difícil consertar, porque há muito código escrito em cima disso para simplesmente resolver com 3 dias de reprogramação. Mas é difícil ocorrer.

d) Só há um componente que é lento, mas ele deixa seu site inteiramente lento (por exemplo, um componente Javascript com um menu de árvore).
Se isso ocorrer, substitua o componente, ou redesenhe o site.

Antes de sair mudando tudo, faça uma análise para ver o que está errado na sua aplicação.

BOA THINGOL, quando eu li as 3 primeiras ja estava desanimado pq eu tento seguir exatamente o que voce falou mas quando chegou no javascript eu parei… e é a unica parte do meu codigo em js é o maldito menu em arvore… brigadão cara… sabe me dizer como posso substituir esse menu em arvore utilizando algo que nao seja Java Script… q deixe a aplicação menos pesada?

Bom dia.

Utilizando o Hibernate, pode ocorrer do sistema comer muita memória, dependendo de como foi configurado. Outro detalhe é a utilização de concatenação de objetos do tipo string.

De qualquer forma você pode utilizar ferramentas de profile para medir o tamanho dos objetos carregados na memória. O probe pode ajudar nisso indicando o tamanho dos objetos na memória e a memória total utilizada.

Outra possibilidade. Se você iniciou o servidor com pouca memória a aplicação pode ficar mais lenta, visto que o garbagge collector terá que trabalhar mais.

Espero que eu tenha ajudado.

t+

Cara, temmuitas hipóteses, mas de cara eu te falo que isso é banco de dados.

Vamos lá!

Existe consultas/manipulação em loops? Se existir, como está sendo feita os comits em banco?

Normalmente, quando a gente começa a desenvolver, temos a tendencia de colocar o commit dentro do loop. E isso é um desastre.
Bom, primeiro vc usa o preperedStatement ao invéns do Statement. Daí, dentro do loop vc envoca o método executeUpdate e ao sair do loop o commit. Assim, ele atualiza o banco de uma vez soh, ao invez de fazr isso registro por registro.

Se for consulta, vc parametriza o PreperedStatement. Ele é otimizado e compila o seu sql. Se vc fizer a mesma consulta com sql puro, ela será mais lenta que utilizando o PreparedStatement.

Outra fonte de lerdeza é como vc trata as conexões ao banco. Vc costuma liberar as conexões assim que termina de usar? Se não, isso vai acumulando conexões no banco. Dependendo da forma que vc configurou o banco, hehehehe, o desenpenho da sua máquina cai a zero.

Por fim, dê uma olhada nas suas pesquisas. Pesquisas mal feitas e cruzamentos desnecessário forçam muito o banco e faz que o desempenho mingüe.

Olha, vc pode fazer consultas de duas formas, a bom e a ruim. O problema é que da forma ruim é mais fácil.

Como vc usa o synchronized? O synchronized deve ser utilizado só e somente só no bloco que trata com o banco. Qualquer outra parte do código deve estar fora do synchronized.

Sabe, por enquanto, esses foram os eros mais comuns que eu lembrei.