Artigo: Os fundamentos de teste de software e sua importância na qualidade de projetos

Artigo desenvolvido e apresentado no congresso de pós graduação do Grupo Educacional UNIS (Centro Universitário do Sul de Minas Gerais) na data de 06/12/2014 para a obtenção de especialista em engenharia de software com ênfase em desenvolvimento em JAVA.

Artigo Desenvolvido

Apresentação em Power Point

Anúncios

O que são Cron Jobs

Cron JobsO que são e como usar as Cron Jobs?

Hoje precisei criar uma rotina que em determinado horário ele executa um script em php automaticamente para mim todos os dias no mesmo horário, portanto em pesquisa descobri o Cron Job.

O que são as Cron Jobs?

As Cron Jobs são como as Tarefas Agendadas do Windows: são tarefas executadas automaticamente de X em X tempos… Fazendo uma analogia à vida real é quando você tira o lixo pra fora ou arruma seu quarto, provavelmente você faz isso seguindo sempre um mesmo intervalo de tempo… De 2 em 2 dias, de 1 em 1 semana e por ai vai.

O termo “Cron Job” (também só chamado de cron) está mais ligado a sistemas UNIX do que Windows mesmo… Por isso o que vou falar aqui só se encaixa no Linux. Se você usa Windows é só dar uma olhada nas tarefas agendadas que você vai ter uma interface completa para trabalhar com as Tarefas Agendadas.

Pra que usar uma Cron Job em um site/sistema online?

Acho que o propósito mais comum de uma Cron Job seja a rotina de backup… Scripts que rodam diariamente (ou até mais demorados) e que fazem o backup do site e do banco de dados.

Você pode criar uma cron para quase qualquer coisa, mas geralmente são para atualização, limpeza, backup e etc.

Como criar uma Cron Job?

Se o seu site roda em algum servidor especializado e você tem um painel de controle como o cPanel recomendo que dê uma olhada lá pois existe uma interface web prontinha para gerenciar as crons… se você não tem esse painel ou não tem acesso à ele vai ter que ir direto ao shell / terminal do seu servidor e começar a gastar o dedo.

A definição de uma cron job consiste em uma linha com 6 valores separados por espaço, assim:

minuto hora dia mes dia-da-semana linha-de-comando

Vamos a alguns exemplos de configuração de tempo antes de criar a cron em si:

Cron Job que rode todo dia as 06:00am

0 6 * * * linha-de-comando

Cron Job que rode as 12:30am de segunda e sexta

30 12 * * 1,5 linha-de-comando

Cron Job que rode a meia-noite de três em três dias

0 0 */3 * * linha-de-comando

Cron Job que rode todo dia a cada duas horas

0 */2 * * * linha-de-comando

A linha-de-comando

É um comando que você usaria normalmente para iniciar um script ou chamar um wget. :)

Instalando suas Cron Jobs

Agora é só salvar o conteúdo das suas crons, uma por linha em um arquivo chamado cron.txt e colocar uma linha assim no começo (primeira linha) do arquivo:

MAILTO=meuemail@meudominio.com

Isso fará com que os erros sejam enviados para o e-mail determinado.

Depois é só ir no terminal/shell e chamar o comando:

crontab cron.txt

Se nada der errado a cron foi instalada com sucesso e você pode vê-la na lista de crons que estão rodando:

crontab -l

Desenvolvimento de Software AD HOC

Quem gerencia projetos, ou já contratou empresas para executar projetos, sabe que uma das maneiras de se diminuir custos e prazos de entrega é diminuir a qualidade do produto, não utilizar processos definidos, não gerar documentação, não executar fases previstas no desenvolvimento de software e não planejar e executar testes apropriados.

É justamente aqui que se está se armando uma grande armadilha. Os envolvidos podem não estar cientes das consequências geradas da entrega do sistema desenvolvido sem ter sido dada a devida atenção à qualidade. Todo numerário economizado no desenvolvimento poderá e será gasto na geração de novas versões corrigidas que deverão ser entregues ao cliente, além de termos um custo imensurável ligado a imagem do produto e da própria empresa.

Outro efeito da falta da utilização de processos definidos e da engenharia de software é a geração de sistemas não amigáveis para uso, apresentando informações consideradas não fidedignas e com erros de funcionamento. Neste cenário, nenhum usuário se interessará em utilizar o sistema desenvolvido, fazendo que o projeto fracasse e que seja perdido todo o investimento realizado.

Imagine o cenário de um sistema de cobrança bancária, para o qual você poderia estar participando de um processo de manutenção corretiva, sem ter documentação do sistema e sem ter conhecimento das regras de negócio implementadas. Imagine também que está manutenção está relacionada à correção de informações, que estão sendo geradas incorretamente. Agora, para finalizar, imagine que o sistema possui milhares de linhas de código e você é novo na equipe, sendo que os programadores que implementaram o sistema não estão mais na empresa.

Por mais que este cenário seja assustador, podemos encontrá-lo neste exato momento em diversos lugares, enquanto você lê este artigo.

O que faltou no projeto de desenvolvimento deste tipo de sistema?

Tecnicamente, poderia citar:

  • Engenharia de Software e utilização de processos definidos
  • Utilização de metodologia de desenvolvimento de sistema alinhado ao paradigma associado ao projeto
  • Utilização de Design Patterns quando apropriado
  • Documentação adequada
  • Planejamento e execução de testes adequados

Do lado humano, poderia citar:

  • Participação no projeto de profissionais com conhecimento dos itens técnicos acima relacionados
  • Falta de percepção do patrocinador do projeto, do valor e benefícios de se utilizar os itens acima relacionados
  • Falta de conhecimento dos envolvidos no projeto, das melhores práticas de mercado para desenvolvimento de software e de seus benefícios

Já tive a oportunidade de presenciar de empresários e executivos, o seguinte comentário:

Prefiro o desenvolvimento de software sem utilizar Orientação a Objetos e processos de desenvolvimento, pois é mais barato e mais rápido de se disponibilizar o sistema para os usuários.

Desenvolver código baseado nesta ideia pode gerar as seguintes consequências:

  • Implantação de sistemas cheios de erros, constantemente entrando em manutenção;
  • Sistemas que podem não atender às expectativas dos Stakeholders;
  • Softwares com alto custo de manutenção;
  • Softwares difíceis de serem utilizados, não atendendo às necessidades dos StakeHolders;
  • Grande insatisfação dos usuários;
  • Fracasso do projeto.

O desenvolvimento de sistema sem utilizar processos, AD HOC, acaba custando muito mais caro, gerando insatisfação.

Já presenciei várias vezes, pessoas que simplesmente não queriam e não utilizavam sistemas disponibilizados pela empresa, por pelo menos um dos seguintes motivos:

  • Não confiavam nos dados por eles apresentados
  • Porque não atendiam a suas expectativas e necessidades do dia a dia
  • Porque tinham usabilidade ruim
  • Porque viviam apresentando problemas de funcionamento

O detalhe mais triste é que as empresas onde estas pessoas trabalhavam, investiram dinheiro e tentaram disponibilizar sistemas para melhorar a produtividade e diminuir custos das mesmas. O resultado foi exatamente o contrário, além de não diminuir custos, nem aumentar a produtividade, as empresas perderam todo o investimento realizado e o sistema caiu em desuso, literalmente, sendo jogado fora.

Bibliografia

Artigo Retirado de Profissionais TI

 

Crescimento do Big Data deve incentivar o surgimento de novos negócios

BIG DATAPesquisa realizada pela ABES (Associação Brasileira de Empresas de Software) e pela IDC mostra que o Big Data terá investimento de US$ 426 milhões no Brasil em 2014. O estudo também revela que as empresas estão aprimorando suas estruturas de análise de dados, mas devem enfrentar escassez de mão de obra especializada.

Além disso, o crescimento do Big Data deve incentivar o surgimento de novos negócios referentes à analytics, como empresas Data Brokers ou Analytics Providers.

O levantamento também aponta que os data centers estão em alta. A necessidade de otimização (térmica, elétrica e, principalmente, de gestão) provocará um ciclo de renovação nos data centers mais antigos. Segundo a pesquisa, a busca por Colocation e Hosting continuará, apesar do crescimento na contratação de IaaS nos próximos meses.

Falando em Big Data…

O Big Data ganhou destaque na Copa do Mundo, pois a seleção da Alemanha, campeã da competição, usou a tecnologia para customizar o treinamento de cada jogador.

O resultado inspirou outros clubes. No mês passado, o Grêmio anunciou que também aderiu ao Big Data. O conjunto de soluções tecnológicas, que também estará à disposição do juvenil, deve potencializar a formação dos atletas e da equipe.

O Bayern de Munique também levou o Big Data para os gramados. Com isso, o clube  poderá monitorar, por exemplo, comportamentos que costumam levar a lesões. Dessa forma, será possível focar na saúde e na condição física dos jogadores.

Além disso, o Big Data deverá ajudar na parte tática, mostrando o comportamento de jogadores em treinos e em jogos. Os times de base também serão beneficiados com a análise de dados.

Outras tecnologias

Atual bicampeã do Campeonato Alemão e participante da Champions League, a equipe do Bayern de Munique também usa ferramentas tecnológicas para melhorar a experiência do usuário e ampliar a presença global.

Com a ajuda das tecnologias de CRM (Gestão de Relacionamento com Cliente), o clube alemão pode personalizar a experiência do usuário com dados coletados no site do time, por exemplo, e ficar mais conectado com os milhões de torcedores ao redor do mundo.

Fonte: Stefanini

Conformidade legal do software: como administrar?

Conformidade legal do software: como administrar?Na era do SDx, software é um elemento difundido em quase todos os produtos e processos, e com o tempo, as fontes estão sendo multiplicadas. Elas incluem desenvolvimento interno, fornecedores de sub-sistemas e chips, contratos terceirizados, repositórios de código aberto e trabalhos anteriores de desenvolvedores. E, diferente de hardware, o software é facilmente acessado, replicado, copiado e reutilizado. A adoção não-gerenciada e a falta de cuidado com licenciamento e direitos autorais pode se transformar em uma grande dor de cabeça. Inúmeros processos judiciais destacam os riscos do negócio e os enormes custos quando a conformidade legal do software não é feita corretamente – custos decorrentes de processos judiciais, recalls, correções de problemas pós-lançamento e perda de oportunidades de marketing.

Principais aspectos da conformidade legal Garantir conformidade para obrigações legais implica seguir três principais aspectos:

  1. Definição de uma política corporativa (ou específica) de propriedade intelectual que precisa ser usada para todos os serviços e produtos associados.
  2. Auditoria de software para determinar todas as implicações legais associadas à política de propriedade intelectual.
  3. Correções necessárias – legais ou de desenvolvimento intensivo – para que todos os componentes de softwares fiquem de acordo com a política de propriedade intelectual.

A política deve ser definida de acordo com ambos os objetivos de negócio da organização e dos processos de engenharia. O processo requer, portanto, o envolvimento de administradores de negócios e engenharias, além de um conselho legal. A política deve ser clara e aplicável. Deve ser captada para distribuição e aplicação no desenvolvimento e qualidade de serviços de seguros.

Sob a perspectiva de um comprador de software corporativo, todos os softwares escritos externamente devem passar por uma auditoria sobre a política de propriedade intelectual da empresa. Se o software já passou por isso do lado do fornecedor, então melhor ainda, mas é importante considerar a utilização do software em nível corporativo.

Questões de propriedade intelectual afetam mais do que o conteúdo do software: elas interferem na utilização e as empresas devem estar cientes dos potenciais problemas de conformidade em toda a cadeia. Auditoria e detecção podem ser realizadas por ferramentas automatizadas ou por meio de auditoria manual.

Qualquer “conserto” necessário para tornar o software legalmente aceitável pode ser complexo. Alguns componentes podem precisar de substituições completas devido a possíveis infrações. Isso pode sair caro, já que os novos componentes de softwares precisam ser encontrados e o software, em geral, terá de ser testado novamente.

Em outros casos, talvez seja suficiente formalizar a assunção de obrigações requeridas por licenciamento ou direitos autorais e assegurar o acompanhamento. Em todos os casos, quanto mais cedo às questões legais forem resolvidas menores serão os gastos para as empresas caso ocorra algum problema.

As obrigações legais vão além do processo de desenvolvimento e precisam ser tratadas com concepção. Os elementos críticos de uma gestão efetiva de software de IP em uma organização são:

  1. Existência de uma política de IP para cada processo e um procedimento para disseminá-lo e aplicá-lo. As políticas corporativas de propriedade intelectual devem ser baseadas nos objetivos de negócios das empresas e devem ser claros e aplicáveis.
  2. Processos e ferramentas para determinar as obrigações legais e administrar a propriedade intelectual do software criado e/ou adquirido na organização.
  3. Software que Lista de Materiais (da sigla em inglês, BoM) que registra completamente os componentes do produto, sua proveniência e as obrigações de licenciamento que ele acarreta. Um BoM adequado é fundamental para determinar as obrigações legais de um software.
  4. Seguro e suporte para consumidores preocupados com a qualidade e situação de IP do software oferecido.

Esses elementos fornecem uma base para as obrigações legais necessárias para a utilização segura de um software. Integrar medidas conscientes para cumprimento das normas no processo de desenvolvimento, além de incorporar aspectos de administração efetiva de propriedade intelectual dos softwares na organização agora são questões essenciais para qualquer entidade preocupada com softwares.

FONTE: CIO

Otimizações na Web e o carregamento assíncrono

Ao preocupar-se com otimizações Web, o uso de ferramentas como o PageSpeed ou YSlow é muito importante, mas ainda mais crucial é executar testes frequentes e analisar os tempos. A ferramenta WebPageTest, é excelente para esse fim.

Um post aqui do Blog sobre otimização de performance na Web mostrou 7 práticas simples e altamente recomendadas para melhorar sensivelmente a performance de qualquer página Web, como usar GZIP, agrupar e comprimir CSS e JavaScript, colocar CSS no topo e JavaScript embaixo da página, entre outras. Mas há muitas outras práticas interessantes, como o carregamento assíncrono de JavaScript e componentes não essenciais à página.

Carregamento assíncrono de JavaScript

Carregamento assíncrono de JavaScript

Carregamento assíncrono de JavaScript

Colocar arquivos JavaScript no <head> ou espalhado no meio do HTML é má prática há anos. A boa prática é sempre jogar para antes do </body>, uma das regras principais analisadas pelo YSlow. Mas será que jogar o JavaScript para o fim da página é suficiente?

Muitos navegadores não suportam download em paralelo de arquivos JavaScript quando usamos a tag <script>, independentemente da posição em que apareça. E não apenas navegadores antigos como IE6 ou 7; Chrome, Opera, Firefox3 e outros engrossam essa lista. Steve Souders, papa de otimizações Web, sugeriu diversas técnicas em seu livro Even faster Web Sites. Começaram a surgir então ideias e bibliotecas com objetivo de carregar JavaScript em paralelo assincronamente, como LABjsHeadJS e ControlJS, do próprio Steve.

Estou estudando sobre otimização de páginas web portanto, utilizarei o o LABjs, mas independentemente de framework, o importante é carregar assincronamente seus arquivos JavaScript, principalmente se vários arquivos são usados na página. Além do download paralelo, o evento onload dispara mais cedo, executando os callbacks associados a ele e dando uma medida melhor de performance da página.

É preciso tomar cuidado, porém, com a ordem de execução dos scripts caso haja dependências entre eles (muito comum ao usar um framework como JQuery). As ferramentas citadas possuem suporte para manter a ordem de execução. Um outro problema é quando há uso do document.write, algo que é má prática há muito tempo mas infelizmente ainda muito usado.

Usar o LABjs é bastante simples:

// carrega 3 scripts em paralelo mas mantém ordem de execução$LAB.script(‘jquery.js’).wait()    .script(‘plugin.jquery.js’).wait()    .script(‘app.js’); 

// carrega e executa outro script em paralelo, com callback

$LAB.script(‘sem-dependencias.js’).wait(function() {

   alert(‘Callback executando quando script carrega’);

});

O HTML5 especificou um novo atributo async na tag <script> mas poucos browsers suportam. O IE possui um atributo proprietário defer há muito tempo, com propósito parecido. Enquanto não há uma solução padrão e portável, o uso de algum framework de carregamento assíncrono é recomendado.

Adiando o carregamento de conteúdo secundário

Além de JavaScripts assíncronos, é possível melhorar bastante a performance deixando para carregar certos componentes mais tarde, apenas quando necessários. A Caelum tem fotos grandes com chamadas principais rotacionadas. É um efeito muito comum atualmente, mas um grande desafio de performance, já que essas imagens costumam ser grandes e pesadas.

A primeira implementação da Caelum consistia em um HTML simples com tags <img> apontando para cada imagem, um pouco de CSS para mostrar apenas uma imagem por vez e um código JQuery para alternar as imagens com um efeito legal. É uma implementação usada por muitos Sites e plugins do JQuery.

Mas colocar as <img> direto no HTML fazia o navegador carregar todas essas imagens conforme ia lendo o HTML, mesmo que 3 das 4 imagens só fossem aparecer para o usuário muito tempo depois. Era gasto um tempo precioso do carregamento da página, que podia ser usado carregando outros componentes mais essenciais para a renderização inicial, como outras imagens do layout e scripts.

A solução foi carregar assincronamente, via JavaScript, as imagens secundárias, deixando inicialmente apenas a primeira imagem com HTML normal. Usamos os data attributes do HTML5 para criar atributos próprios no HTML que referenciam os endereços das imagens secundárias:

<ul>

<li>

<p>Conheça os cursos de Java da Caelum</p>

<img alt=”Cursos Java” src=”banner_01.jpg” width=”960″ height=”330″ />

</li>

<li data-img-src=”banner_02.jpg”>

<p>Veja os projetos da Caelum</p>

</li>

<li data-img-src=”banner_03.jpg”>

<p>Baixe as apostilas gratuitas</p>

</li>

</ul>

Repare como apenas o primeiro banner possui a <img> direto no HTML. Os demais apenas declaram os caminhos em atributos data- que não são interpretados pelo navegador. Uma função JavaScript pode, então, ler esses valores e gerar as tags <img> de forma assíncrona, depois que a página foi carregada:

$(function() {

setTimeout(function(){

$(‘li[data-img-src]’).each(function(){

var src = $(this).attr(‘data-img-src’);

$(‘<img>’).attr(‘src’, src).appendTo(‘ul’);

});

}, 600);

});

Usando JQuery, selecionamos todos os <li> que possuem o atributo data-img-src. Criamos, então, um novo elemento <img> com o src apontando para o endereço da imagem. Repare que tentamos adiar esse carregamento o máximo possível, já que a segunda imagem só aparecerá para o usuário depois de vários segundos. No código acima, agendamos o script para rodar 600 milissegundos após o carregamento da página.

Observe no gráfico de conexões HTTP ao longo do tempo como o primeiro banner é carregado no início junto com o restante da página e os demais são carregados bem depois:

primeiro banner é carregado no início junto com o restante da página e os demais são carregados bem depois

Uma preocupação possível com essa prática é com usuários com JavaScript desabilitado ou navegadores limitados. É preciso pensar bem nesse caso e oferecer uma boa experiência para o usuário em todas as situações. Mas as imagens rotativas dependem de JavaScript para funcionar; logo, mesmo sem o carregamento assíncrono das imagens secundárias, o efeito não funcionaria e apenas a primeira imagem (em HTML e CSS puros) seria mostrada. Portanto, não há impacto para o usuário em usar a solução JavaScript para carregamento das imagens. Um impacto possível é que os buscadores não enxergam mais as imagens secundárias e, portanto, estas não serão indexadas. Não é um problema no nosso caso, mas pode ser um detalhe importante em outros cenários.

Widgets externos assincronamente

Outro bom exemplo para carregamento assíncrono é dos widgets do Facebook, usados na home de muitos sites e blogs com um Like Button no topo e um Like Box no corpo da página. Onipresentes hoje na Web, esses widgets são importados na página com um <iframe>. O <iframe> tem a vantagem de carregar paralelamente com a página, mas ainda trava o onload da página até que acabe de carregar – e os widgets do Facebook são gigantescos, com mais de 50 requests, 250 KB e 5 segundos para carregar mesmo em navegadores modernos.

Steve Souders mostrou que a tag <iframe> é o elemento mais caro a ser criado no DOM, ordens de magnitude mais lento, mesmo vazio. Mas o principal problema é o onload da nossa página passar a depender do onload do widget, que é grande e lento. Devemos otimizar o tempo que o onload dispara, pois isso dispara os callbacks de onload (bastante comuns) e porque o indicador de carregamento do navegador para de girar após o onload (dando a sensação de rapidez pro usuário).

A melhor estratégia é carregar o <iframe> após o onload via JavaScript, ainda mais se não é algo crítico, como o widget do Facebook. O código é bastante simples:

$(window).load(function(){

$(‘#facebook_like_box’)

.html(‘<iframe src=”https://www.facebook.com/plugin…></iframe>’);

});

Esse carregamento assíncrono do Facebook foi o responsável pela maior parte da otimização final mostrada no vídeo do início do post. Repare no gráfico a seguir como o carregamento todo dos widgets é feito apenas após o onload e, apesar de grande e lento, não afeta a performance do restante da página:

1

Como o widget demora bastante para carregar, o resto da página (já bastante otimizada) aparecerá rapidamente mas o widget bem depois. Para minimizar esse efeito, o header da página da Caelum carrega primeiro um botão like de mentira, com uma imagem simples copiando o visual do widget do Facebook. Quando o widget acaba de carregar, ele é inserido no lugar dessa imagem falsa com precisão, a ponto de ser quase imperceptível para o usuário. Se o usuário clicar na imagem falsa antes do widget carregar, será levado para o Facebook da Caelum; mesmo comportamento se o JavaScript estiver desabilitado. É um truque simples que traz a sensação de alta performance ao carregar a imagem falsa logo, apesar de ser tudo assíncrono e demorado.

 FONTE: Caleum

 

As 7 práticas para um site otimizado

Todo mundo gosta de sites rápidos. Seus primos não sabem dizer se você tem um arquitetura escalável, se seu banco NoSQL é mais robusto ou se é melhor usar Web Services SOAP ou REST. Mas eles sabem dizer duas informações com precisão: se seu site é bonito e se ele é rápido. Performance, medida pelo usuário, é o que te diz se a velocidade de resposta da sua aplicação é aceitável. E, assim como usuários não se cansam de bordas redondas e sombrinhas bonitas, sempre haverá otimizações possíveis para tornar seu site mais rápido.

Inspirado pela recente edição 2010 da Velocity Conference organizada pela O’Reilly. O TOP 7 não pretende ser uma lista completa e nem detalhada de boas práticas. É mais um guia rápido sobre tudo o que você deveria fazer em qualquer site antes de perguntar a opinião dos seus primos – ou do seu chefe, ou de qualquer usuário. Eis então:

As 7 práticas para um site otimizado

TOP 7 das Otimizações na Web:

0. Habilite GZIP em todas as suas páginas. Se você ainda não fez isso, pare imediatamente de ler esse post e faça. É o passo zero, nem vou contá-lo. Dicas de como fazer no TomcatJettyApache,IIS.

1. Agrupe arquivos JavaScript/CSS. 90% do trabalho de otimização consiste em diminuir o número de requests feito na página e o peso de cada um deles. Você usa JQuery (ou qualquer outro framework) com JQuery UI e mais meia dúzia de plugins, sem contar o código JS da sua aplicação? Junte tudo no menor número de arquivos possíveis para evitar muitos requests. Mesma coisa com CSS, um arquivo com tudo basta. Mas gosta de manter as coisas organizadas ao invés de escrever um arquivo com milhares de linhas? Então junte essas coisas dinamicamente como faz o pessoal do Digg ou faça o serviço no build da aplicação.

2. Comprima o JavaScript/CSS. Você escreve JS/CSS elegante, bem documentado, com código organizado e variáveis de nomes legíveis. Mas seus primos não se importa com isso, eles querem um site rápido e isso significa não trafegar no request bytes e mais bytes de documentação ou de código legível. Comprima todo o seu código JavaScript e CSS usando o YUI Compressor ou o Google Closure Compiler. Faça isso em build time ou dinamicamente.

3. Otimize suas imagens com Smush-it. Nem todos os KB de suas imagens são necessários para o cliente. Arquivos JPEG possuem uma série de metadados e PNGs possuem palhetas de cores. Remova vários KBs desnecessários de suas imagens usando o Yahoo Smush-it em todas elas.

4. Coloque CSS no topo e JavaScript embaixo. Simples assim. Referencie os seus CSS no <head> com <link> para evitar o flash effect, e coloque seus scripts logo antes do fechamento do <body> para não atrasar a renderização da tela.

5. Não redimensione imagens no HTML. Não use os atributos width e height das imagens para redimensionar seu tamanho. Sirva as imagens já com tamanho certo e otimizadas. Mas coloque sempre o width e height de todas as imagens para ajudar o browser nos cálculos da renderização da página.

6. Configure o Expires corretamente. Use o cache do navegador para prover uma melhor experiência ao usuário no segundo request – seja no retorno ao site ou navegando para a próxima página. Permita também que Proxies entre seu servidor e o cliente cacheiem elementos do seu site para evitar um download demorado. Configure o header de Expires de todo seu conteúdo estático (JS, CSS, imagens) com alguns dias de duração.

7. Use YSlow e PageSpeed. Depois que você fez todas as otimizações anteriores, instale o YSlow e o PageSpeed para um diagnóstico detalhado de seu site. Monitore sua performance constantemente e vá implementando sempre novas otimizações. Seus usuários agradecem.

Esse TOP 7 são todas as otimizações que você deveria ter feito ontem em qualquer site seu antes de começar a falar em performance. Há muitas outras práticas, algumas mais complicadas, como CSS Spritesusar CDNsotimizar seus cookies, fazer preload e postload de conteúdo, ou comprimir seu HTML. Dependendo da tecnologia que você usa no seu sistema, você terá maior ou menor facilidade de aplicar todas essas práticas: no JSF e ASP.NET você terá benefícios para desenhar sua interface, mas muito mais trabalho de fazer esse ajuste fino; com Struts, Rails, ASP.NET MVC, VRaptor e frameworks action based, será o contrário.

Fonte: Caelum