Com o IIS 7 da Microsoft, ficou mais simples configurar a compressão das páginas  de sites e blogs, isso colabora para uma melhora da performance das páginas, pois reduz o tamanho dos arquivos enviados pelo servidor o que resulta em menor consumo de banda de transferência e redução no tempo ao carregar páginas.

O que é  compressão de páginas de um site e como ela funciona? A compressão de páginas funciona no mesmo princípio utilizado por um compressor de arquivos, como o ZIP, por exemplo.

O servidor web fica responsável por comprimir os arquivos estáticos, principalmente os de texto, que oferecem uma taxa de compressão maior, e enviá-los ao navegador do cliente. Este então recebe os arquivos comprimidos, realiza a descompressão e exibe a página.

Este processo implica num aumento da carga no processador do servidor, mas tendo em vista que os processadores estão cada vez mais poderosos e potentes, a vantagem obtida pela redução do consumo de banda e do tempo de carregamento é suficiente para justificar o uso desta funcionalidade.

A versão 6 do IIS permitia a compressão de acordo com a extensão do arquivo (aspx, html, txt etc.), e permitia ativá-la por site, pasta ou arquivo. As configurações não eram feitas de forma simples, pois dependiam de alguns scripts e edição direta da metabase do IIS.

Assim como em outras áreas, o IIS melhorou profundamente o gerenciamento da compressão. Ao invés da compressão por extensão, ele permite a ativação baseada no MIME TYPE, além de tornar mais simples a configuração, que pode ser feita diretamente pelo IIS Manager, através da linha de comando ou simplesmente pelo arquivo de configuração do site web.config, o que torna o processo muito mais simples.

Outra melhoria que o IIS 7 trouxe foi oferecer a possibilidade de desabilitar a compressão automaticamente quando a CPU do servidor fica sobrecarregada além de um limite pré-estabelecido. Isso significa que quando o servidor está com pouca carga, e a sua CPU está sendo pouco utilizada, a compressão vai ser utilizada normalmente. Mas, numa ocasião em que os acessos aumentam e passam a sobrecarregar a CPU do servidor, o IIS é inteligente o suficiente para desabilitar automaticamente a compressão e liberar os ciclos de processamento do processador para outras tarefas.

O IIS suporta dois tipos de compressão: a estática e a dinâmica. A primeira é utilizada para comprimir conteúdo estático do site que dificilmente sofre alteração, como arquivos doc, ppt, HTML e txt. Apesar de imagens serem consideradas estáticas, elas já são comprimidas por natureza, e acabam não se beneficiando da compressão realizada pelo IIS 7.

Já na compressão dinâmica, o IIS 7 realiza a compressão toda vez que um cliente requisita um conteúdo, mas não a armazena em cache. Esta diferença permite que o conteúdo gerado dinamicamente através de um site em ASP.Net possa ser comprimido antes de ser enviado ao cliente.

O IIS 7 suporta os esquemas de compressão Deflate e GZip para comprimir o conteúdo retornado pelo servidor. Ambos os esquemas são reconhecidos pelo mercado como excelentes opções e podem ser ativados diretamente pelo arquivo web.config.

Configurando a compressão no IIS 7

Como fazer

  1. Habilite a compactação de conteúdo estático e dinâmico nas features do windows
  2. Configure o web.config de sua aplicação

Configurando passo a passo

Para habilitar a compressão de dados no IIS, primeiro tenha certeza que a feature está instalada. No seu windows 7/8, abra o “Turn windows features on and off” e habilite “Dynamic e Static Content Compression” conforme a figura abaixo:

Já no Windows Server 2008, vá no “Server Manager” e habilite a role conforme a figura abaixo:

Configurando o web.config

Pronto, no servidor é só isso, agora vamos configurar a aplicação. Abaixo vai um exemplo de como seria uma configuração. Este código deve ficar dentro da tag “system.webserver”.

<system.webServer>
<urlCompression doDynamicCompression="true" doStaticCompression="true" <span class="crayon-v">dynamicCompressionBeforeCache</span><span class="crayon-o">=</span><span class="crayon-s">"true"</span> />
</system.webServer>

Essa tag é o botão de liga/desliga da compressão. O dynamicCompressionBeforeCache diz que o cache já será feito com tudo compactado. Só não deixe true aqui se acabar tendo algum problema em seus scripts.

Em sua aplicação, essa é a única configuração que você consegue fazer. O primeiro problema que você vai enfrentar é que mimeTypes do tipo aplication/json (seus queridos webservices) não vão ser compactados por padrão. Para ter mais controle sobre o processo todo (e escolher os mimetypes a serem compactados por exemplo), você tem que configurar diretamente o nó de servidor do seu IIS.

Configurando o IIS

No console do IIS você pode configurar a compactação com muito mais granularidade. Abra o IIS, clique no nó principal e vá no “configuration editor”.

No “configuration editor”, você tem essas opções:

Vamos falar de algumas delas:

scheme

Clique na primeira “Collection” e defina aqui qual tipo de compressão será usada: gzip ou deflate na maioria dos casos. Além disso, você pode configurar também o nível de compressão. Eu recomendo o máximo para conteúdo estático, já que estes arquivos mudam muito pouco e uma vez compactados eles vão pro cache. Já para o conteúdo dinâmico, faça testes com seu servidor e veja o custo x benefício em incrementar esse número. Em minha experiência, números altos gastam muito processamento e não aumentam em quase nada a compactação. Os campos são “staticCompressionLevel” e “dynamicCompressionLevel”. De novo, faça seus testes.

Trava de segurança em caso de muito processamento

Compactar o retorno para o navegador com certeza vai te economizar banda, mas vai também te custar mais processamento. Aqui podemos fazer como que o servidor pare de compactar arquivos caso o processamento aumente muito.

Em “staticCompressionDisableCpuUsage” você diz quando o servidor deve parar de compactar arquivos. Por exemplo, quando atingir 80% de uso de cpu.

Em “staticCompressionEnableCpuUsage” você diz em que nível o processamento tem que baixar para que a compressão seja ligada novamente. Por exemplo, baixou para 50%, volte a comprimir o response.

dynamicTypes e staticTypes

Aqui você diz que tipo de conteúdo vai ser compactado configurando por mimetype. Lembre-se que conteúdo estático é quando o IIS serve um arquivo diretamente e dinâmico é todo resto. Não esqueça de adicionar aqui o “application/json” se fizer sentido pra você.

Outros

Há vários outros parâmetros para testar, como desabilitar compressão para proxies, máximo de disco a ser usado, etc. Analise seu contexto.

Comparando

Criei uma nova aplicação usando o template do ASP.NET MVC 4 e dei play, vamos ver o tempo de carregamento da página inicial:

Levou 333ms para o navegador baixar tudo, isso porque estamos em localhost. Em um servidor remoto esse tempo seria consideravelmente maior.

Com compressão habilitada, a coisa já melhora. Perceba a diferença brutal no jquery:

O tempo baixou para 192ms. Veja também que o novo tamanho dos arquivos é bem menor. Viva a compactação!

O IIS avisa o cliente que o conteúdo está compactado através de um header conforme a figura abaixo:

Simples, certo?

Não vejo por que não habilitar isso na maioria das aplicações, mas lembre-se que existe um custo extra de CPU para a compactação. A funcionalidade de desligar a compactação automaticamente se o processamento sobe muito é fantástica e nos traz um pouco de segurança nesse aspecto.

Junte isso com o uso de bundle and minification de seus scripts e css e um bom uso de cache e você terá uma aplicação muito mais rápida no navegador do usuário.

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Post Navigation