A jornada, não tão jornada, mas, ainda uma jornada.. você entendeu ;-)

Este espaço é destinado a diversos temas, relacionados a minhas atividades ou mesmo ao cotidiano.

Friday, April 10, 2009

Melhorias de Performance em aplicações Web - part I

Uma área bastante abrangente na atualidade e que tem despertado o meu interesse é área de redes, particularmente a camada de aplicação, mas, quem sabe eu possa passear por outras camadas mais tarde.

Um exemplo é um protocolo de aplicação que é relativamente simples e que faz um enorme sucesso, bem como, tem uma importância realmente fora do comum, o protocolo http.

Muitos "desenvolvedores" desenvolvem aplicações para Web, como aplicações com ASP.NET, sem nem ao menos saber como funciona a arquitetura da rede e isso tem impactos claros na forma como suas soluções são implementadas, implicando muitas vezes em problemas de performance.

Recentemente comecei a fazer uma pesquisa sobre performance para aplicações Web, já que trabalho em um projeto onde estamos utilizando muito Ajax e muito JQuery com o objetivo de tornar nossas páginas mais rápidas. A questão que começou a me intrigar é justamente, como definir performance para aplicações Web? Quais os problemas que enfrentamos e onde gastamos nosso tempo?

Comecei analizando o back-end das aplicações e vi que a mais lenta de nossas procedures levava 3 segundos para retornar os resultados e a maioria das outras excuções de banco durava menos de 1 segundo. Então, logicamente, nosso problema de performance não estava no banco de dados, resolvi "subir" uma camada e passe para o tempo de execução dos códigos no nosso servidor de aplicações, foi ai que tive de procurar um meio de avaliar o tempo entre a solicitação de uma página e a sua montagem no browser.

Ou seja, o problema era no modo como o código estava escrito ou precisavamos diminuir o peso de algumas páginas. Fui pesquisar sobre perfomance de front-end. Ai as pessoas começam a dizer: "javascript! Ajax! javascript!!" e eu digo calma, vamos entender melhor o que acontece.

Outra coisa interessante, eu pensei comigo mesmo, alguém já deve ter pesquisado isso na vida, tenho que encontrar algum artigo ou material sobre o assunto. Foi ai que encontrei o site do Steve Souders (http://stevesouders.com/) e o seu livro. Bom, foi ótimo porque assim que comecei a leitura do livro ficou claro a importância de conhecer como a coisa funciona por baixo. Percebi que mesmo as nossas páginas que já eram rápidas, poderiam melhorar significativamente, simplesmente seguindo algumas das recomendações do livro e tendo cuidado com onde "colocamos as coisas".

Vamos entender melhor, primeiro vejamos como funciona o protocolo HTTP. Esse protocolo que é de uma simplicidade empolgante para os engenheiros curiosos como eu, funciona fazendo requisições de objetos a um servidor que fornece os objetos a medida que eles são encontrados.

Sabendo disso, já fica claro onde você pode ter alguns problemas, por exemplo, é provável (mas, não é certo) que você tenha uma página mais lenta se fizer muitas requisições sem motivo aparente, só por preguiça de arrumar o projeto.

Cada requisição passa por um monte de etapas que vão somar tempo a carga da página que você está pedindo. Por exemplo, a cada pedido, é feita uma resolução de nomes (DNS), o servidor procura o cara e envia para o seu computador, mas, nesse meio tempo, a rede pode estar congestionada, o TCP pode enviar millhares de pacotes de confirmação, e todo esse tempo é somado a sua página.

Imagine o caso em que você tem um conjunto de ícones de um menu, pelo menos uns 12 icones, cada um será uma imagem que precisará ser solicitada ao servidor. No lugar de fazer sua página sofrer com 12 requisições, porque não mapear as imagens em um único arquivo? :-)

São coisas como essas que estou lendo, a medida que for descobrindo coisas legais a eu vou colocando aqui.

Abraço para vocês.

Labels: