Que estratégias você empregou para melhorar o desempenho de aplicativos da web?[fechado]

StackOverflow https://stackoverflow.com/questions/22704

Pergunta

  • Alguma experiência pessoal em superar obstáculos de desempenho de aplicativos da web?
  • Alguma estratégia recomendada para melhorar o desempenho de um aplicativo Web baseado em dados?

Minha equipe de desenvolvimento trabalha em uma aplicação web (relatórios JSP, HTML, JavaScript) que utiliza banco de dados Oracle (PL/SQL).A principal funcionalidade que o aplicativo oferece está nos relatórios, onde um usuário pode obter PDFs de relatórios em alto nível e detalhar níveis mais baixos de detalhes de suporte.

À medida que o número de registros detalhados de suporte cresceu para milhões, o desempenho do sistema foi significativamente degradado.Com base em nossa análise atual das métricas, o gargalo parece estar na lógica que atinge o banco de dados e no desempenho do banco de dados.Alterar o modelo de banco de dados e refazer parte da lógica do lado do servidor está sendo explorado atualmente.

Particionar, indexar, explicar planos e executar estatísticas são coisas que foram feitas no lado do banco de dados para tentar ajudar a melhorar o desempenho.Embora tenham ajudado, não resolveram o problema de forma satisfatória.A parte mais difícil na análise de dados de desempenho é que o banco de dados e os servidores web são administrados remotamente por uma parte diferente da organização de TI, de modo que os desenvolvedores não têm acesso regular e completo para ver o que está acontecendo (especialmente no ambiente de produção, que não é espelhado exatamente em nenhum outro ambiente de desenvolvimento/teste).

Foi útil?

Solução

Embora minha resposta possa não conter nenhuma etapa concreta para ajudar, é sempre por aqui que começo.

A primeira coisa que eu faria é tentar descartar todas as suas suposições sobre qual é o problema e tomar medidas para instalar métricas em todos os lugares que puder.Deixe que as métricas guiem você, e não a sua intuição.Eu persegui muitos, muitos, muitos coelhos brancos seguindo um palpite... eles me decepcionaram mais vezes do que acertaram.

Outras dicas

Você já verificou isso?

Melhores práticas para tornar as páginas da web mais rápidas da equipe de desempenho excepcional do Yahoo!

Se você realmente está tendo problemas no back-end, isso não ajudará.Mas usamos seus conselhos com grande efeito para tornar nosso site mais rápido e ainda há mais a fazer.

Use também o complemento YSlow para Firebug.Você pode se surpreender ao ver onde o tempo real está sendo consumido.

Você já pensou em construir seus dados com antecedência?Em outras palavras, existem grupos de dados que são solicitados repetidamente?Nesse caso, prepare-os antes que o usuário pergunte.Não estou falando exatamente de cache, mas acho que isso faz parte da equação.

Pode valer a pena dar um passo atrás no código e examinar os padrões de uso do sistema.Por exemplo, se você estiver mostrando às pessoas o inventário mensal ou informações de vendas, elas só verão isso no final do mês?Nesse caso, basta criar os dados do último dia e armazená-los.Se eles olharem diariamente, talvez tente construir os resultados dos dias anteriores e armazená-los e evitar o cálculo.Acho que, em última análise, estou empurrando você para um Programaçao dinamica solução;se você souber uma resposta, não resolva novamente.

Como diz Webjedi, as métricas são suas amigas.

Observe também sua pilha e veja onde há oportunidades de armazenamento em cache - e empregue impiedosamente sempre que possível!

Como eu disse em outra pergunta:

Use um criador de perfil. Sim, eles custam dinheiro e usá-los ocasionalmente pode ser um pouco estranho, mas fornecem muito mais evidências reais do que suposições.

Os seres humanos são universalmente ruins em adivinhar onde estão os gargalos de desempenho.Parece ser algo que nossos cérebros não foram construídos para fazer muito bem.Pode parecer óbvio, você pode ter ótimas ideias sobre qual é o problema, mas o mundo real muitas vezes acaba fazendo algo diferente.E otimizar a parte errada do código significa, na melhor das hipóteses, muito trabalho com benefício mínimo.Na maioria das vezes, torna as coisas mais lentas e, às vezes, quebra completamente as coisas.Portanto, antes de fazer qualquer alteração para fins de otimização, você deve sempre ter evidências reais de um criador de perfil ou outra ferramenta precisa.

Nem todos os criadores de perfil custam dinheiro (extra).Para .Net, estou usando com sucesso uma versão antiga do NProf (atualmente abandonada, mas ainda funciona para mim) para criar o perfil de meus aplicativos ASP.Net.Para SQL Server, o criador de perfil de consulta faz parte do pacote.Há também o CLF Profiler da MS, mas nunca consegui fazê-lo funcionar com sucesso.

Dito isto, os criadores de perfil são definitivamente o caminho a percorrer.Dessa forma, você pode ver onde seu programa está gastando a maior parte do tempo e não se concentrar em coisas que você considera lentas.Além disso, significa que você não precisa escrever nada em seu código para realmente registrar as métricas.

Como sugeri no início, existem diferentes tipos de criadores de perfil.Os três que considero mais úteis são os criadores de perfil de aplicativos, que permitem ver em quais funções você realmente passa a maior parte do tempo.O segundo são os criadores de perfil SQL que permitem ver quanto tempo suas consultas levam para serem executadas.O terceiro são os perfis de memória, que ajudam a mostrar por quais tipos de objetos sua memória está sendo usada.Todos os três são realmente úteis e, embora você não os use todos os dias, as vezes em que os usar vão lhe poupar muita dor de cabeça.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top