Como melhorar o desempenho de suas aplicações JSF
Aprenda neste artigo o que fazer para deixar sua aplicação JSF muito mais rápida e assim melhorar a performance de sua aplicação Java.
Aplicações web são essenciais para praticamente qualquer empresa. Ao oferecer uma solução prática e eficaz para realizar a interface com o usuário, sem a necessidade de instalação de um aplicativo do lado do cliente, tais aplicações possibilitam uma maior mobilidade, facilidade de acesso e menor custo.
Buscando trazer essas vantagens para a linguagem Java, a tecnologia JavaServer Faces (JSF) surgiu como uma alternativa ao JSP, tecnologia até então padrão para a implementação de aplicações web em Java.
Ao viabilizar recursos até o momento inexistentes e uma API de fácil utilização, o JSF se firmou no mercado como uma tecnologia de referência, se tornando uma ótima opção para o desenvolvimento web. Indo mais além, o framework JSF implementa o modelo MVC (Model-View-Controller), ou seja, permite que seu código seja organizado em três camadas: modelo, visão e controle, garantindo assim um desacoplamento e uma simplicidade maior para as tarefas de manutenção e evolução.
Porém, mesmo com todas essas vantagens, ainda é necessário um bom domínio dessa tecnologia e um desenvolvimento cuidadoso, com muita atenção aos detalhes, para que se consiga implementar um sistema otimizado e com boa performance.
Neste momento é válido ressaltar que muitos dos problemas de performance das primeiras versões foram resolvidos na versão 2 da especificação. Essas melhorias foram possíveis graças a novos recursos, como Partial State Saving, Tree Visiting e Project Stage, o que tornou mais simples implementar um código realmente otimizado, que resulta em:
- Menor consumo de memória e CPU;
- Melhor gerenciamento do estado de cada componente;
- Otimização no algoritmo de busca de componentes;
- Otimização na serialização da árvore de componentes.
Dito isso, o objetivo deste artigo será orientar como resolver os principais problemas de performance enfrentados pelos desenvolvedores e expor soluções que a tecnologia JSF oferece, a partir de pequenos exemplos de código. Inicialmente, no entanto, iremos analisar alguns conceitos fundamentais do JSF, referentes à árvore de componentes, para que o desenvolvedor possa ficar a par de como esse framework funciona.
Árvore de componentes
Em JSF, a árvore de componentes é um conceito fundamental. A construção dessa árvore é baseada no código de uma página JSF (view), código esse que utiliza a linguagem de marcação XHTML. Após o código ser analisado, uma instância de cada componente JSF é criada e a árvore de componentes é construída. A partir disso, essa estrutura será utilizada ao longo de todo o ciclo de vida do JSF, ciclo esse que é definido pelas seguintes fases:
- Restaurar View: Nesta fase a árvore de componentes é criada ou restaurada, caso já tenha sido criada em uma requisição anterior;
- Aplicar valores: Os componentes JSF são atualizados com os valores enviados na requisição, por exemplo entradas de formulário;
- Conversão / Validação: Conversores e validadores são aplicados sobre os valores dos componentes de entrada (inputs) da página;
- Atualização do modelo: Se a validação for bem-sucedida, os valores dos componentes de entrada são atribuídos às propriedades do bean. Isso significa que os métodos setters dos beans serão chamados;
- Invocar aplicação: Esta fase é onde a lógica da aplicação será executada, isto é, onde os métodos dos managed beans são executados;
- Criar a resposta: Fase responsável por encontrar a página (view) de resposta, percorrer a árvore de componentes e processar cada componente JSF para criar um HTML de resposta para o cliente.
Como vimos, a árvore de componentes está envolvida em todas as fases do ciclo de vida, sendo percorrida várias vezes. Isso sugere que a quantidade de componentes JSF presente em cada uma tem um impacto significativo sobre o tempo de resposta, e consequentemente, sobre o desempenho da aplicação. Com essas informações, podemos assumir que uma árvore de componentes de pequeno porte é benéfica para ter um tempo de resposta mais curto. Tal afirmação pode ser confirmada no gráfico da Figura 1, que mede o tempo de duração de cada fase, com diferentes tamanhos de árvores. Note que quanto maior a quantidade de componentes JSF em uma página, maior é o tempo gasto em cada fase do ciclo de vida."
[...] continue lendo...Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo