Concrete Logo
Hamburger button

Mesa redonda de testes – Parte II

  • Blog
  • 4 de Julho de 2012
Share

Fizemos no dia 25/06 a segunda parte da mesa redonda de testes, desta vez cobrindo aspectos não-funcionais das aplicações. A agenda inicial sugerida foi:

  • – Métricas importantes: tempo de resposta, latência, tempo de carregamento de páginas, quantidade de usuários suportados
  • – Aplicações web: como medir tempo de resposta, latência e tempo de carregamento das páginas
  • – Ferramentas: Google Page Speed, YSlow, Firebug
  • – Técnicas de otimização de front-end: cache, compressão, downloads paralelos, CDN, sprites, minify, boas práticas de estrutura de HTML/CSS/JS
  • – Otimização para 1 usuário: identificar tempo de resposta com apenas 1 usuário acessando e perceber onde ocorrem atrasos e como agir sobre eles
  • – Testes de carga: como gerar carga sobre uma determinada aplicação e avaliar a degradação progressiva do desempenho. Monitorar indicadores do servidor
  • – Ferramentas: JMeter, como gravar scripts e modificá-los
  • – Testes de robustez: como avaliar se a aplicação se mantém saudável ao longo do tempo

Seguimos razoavelmente esta agenda, mas a discussão acabou muito concentrada em front-end e client-side. Falamos bastante dos critérios importantes para a percepção de qualidade dos usuários, e como identificar problemas. Mostramos em detalhes o uso do Google Page Speed e do YSlow e discutimos vários itens avaliados pelas duas ferramentas.

Há várias técnicas utilizadas para acelerar o carregamento das páginas e trazer uma percepção melhor de qualidade aos usuários. Entre elas, podemos mencionar:

  • – Carregar arquivos CSS e JS externamente e no momento certo. CSS é utilizado na renderização da página, e então carregá-lo antes do body é importante. Javascript em geral não deve ser usado no carregamento da página, então pode ser baixado no final da mesma.
  • – Definir cabeçalhos de expiração de arquivos estáticos, permitindo cacheamento por períodos mais longos e reduzindo tráfego de visitantes frequentes. Normalmente isto é configurado no servidor web com tempos padrão para cada tipo de arquivo
  • – Habilitar compressão gzip: todos os browsers modernos suportam conteúdo comprimido com gzip, e isto permite uma redução sensível no tráfego de rede para baixar as páginas
  • – Paralelização de downloads, com ou sem o uso de uma CDN: baixar arquivos de múltiplos servidores reduz o enfileiramento dos downloads, e permite o uso ótimo da banda do usuário final. O uso de CDNs como o Cloudfront normalmente é ainda mais eficiente porque fornece os arquivos de uma origem mais próxima do usuário.
  • – Minificação de Javascript e CSS: durante o desenvolvimento é interessante ter os arquivos JS e CSS legíveis, mas para interpretação dos browsers isto não faz diferença. O processo de minificação de arquivos reduz sensivelmente o tamanho dos downloads e o tempo de carregamento das páginas.
  • – Uso de Sprites CSS: agregar algumas imagens de layouts em um único arquivo reduz a quantidade de downloads e tende a melhorar o carregamento da página. Tipicamente é mais eficiente baixar 1 arquivo de 100 KB do que 10 arquivos de 10 KB, sabendo que os browsers normalmente baixam cerca de 4 arquivos em paralelo de cada servidor.

Após o workshop tivemos mais algumas discussões sobre o tema, e entre outros itens interessantes surgiram:

  • – Cache em memória dos estáticos no server-side (varnish, cache do webserver)
  • – Cache de fragmentos de template e dados obtidos do banco de dados em memória (memcached e cache do framework de template)

Falamos também um pouco sobre o JMeter para criação de testes de carga e robustez, citando a gravação de scripts com proxy. Ficou muito pouco tempo para falar sobre isto, e podemos fazer outro workshop focado em JMeter no futuro.

O vídeo na íntegra pode ser visto abaixo: