There is a brief summary in english by the end of of this post.
Após uma implantação bem sucedida de SharePoint em um cenário de WCM – Web Content Management, antigo CMS, é normal que as pessoas queiram melhorar a performance e o tempo para carregar as páginas.
Em um ambiente de intranet, onde a conexão entre as estações e o servidor é uma rede de 10 Mbps, 100 Mbps ou 1 Gbps, mexer com a compressão dos pacotes talvez nem seja tão vantajoso… os clientes normalmente farão o download das páginas em questão de segundos…
Quando começamos a falar em WANs, links lentos, extranets, e internet, aí o HTTP compression faz todo sentido!
Embora a configuração seja simples, como vocês verão, é necessário um certo tunning para que possamos chegar ao nível ideal.
Existe aqui um trade-off entre performance e compressão que deve ser analisado e ponderado. Quanto maior a compressão desejada, maior a quantidade de recursos exigida do servidor.
Nesse artigo não vou abordar maneiras de como testar ou fazer o base line e nem como comparar qual é o melhor nível. Se você tiver mais interesse em ler sobre isso, leia aqui: http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/d52ff289-94d3-4085-bc4e-24eb4f312e0e.mspx?mfr=true
A configuração no servidor se baseará em alguns pontos:
- Nível de compressão – De 1 a 10
- Arquivos a serem comprimidos – estáticos e dinâmicos
- Tipo de compressão escolhida – estática ou dinâmica ou ambas
Para você poder habilitar a compressão, primeiro você deverá habilitar a dll do GZIP no Web Service Extensions do Inetmgr para fazer a compressão. Sem isso, você pode mexer o quanto quiser na metabase do IIS que não fará diferença alguma. Siga, então, a sequência abaixo. Se o seu Windows 2003 estiver em português, a sequência é idêntica, mas com os nomes em português.
- Vá em Start >> Administrative Tools >> Internet Information Services (IIS) Manager
- Clique em Web Service Extensions e depois em Add a new Web Service Extension…
- Entre com um nome em Extension name: (GZIP por exemplo), marque a opção Set extension status to Allowed, e depois clique Add...
- No campo Path: entre com o path C:\Windows\system32\inetsrv\gzip.dll. Em seguida clique OK.
Lembre-se que C:\Windows é o path da sua instalação do Windows, devendo ser substituido por outro path caso você tenha feito alguma alteração. - Por último, clique OK.
Até agora, tudo o que fizemos foi habilitar o gzip para fazer a compressão. Vamos, então, a compressão em si.
Abra um command prompt e navegue até o diretório C:\Inetpub\AdminScripts.
Nesse momento, você fará sua primeira escolha.
- Se você só quiser fazer compressão estática, execute o seguinte comando:
cscript adsutil.vbs SET W3SVC/Filters/Compression/Parameters/HcDoStaticCompression True
- Se você só quiser fazer compressão dinâmica, execute o seguinte comando:
cscript adsutil.vbs SET W3SVC/Filters/Compression/Parameters/HcDoDynamicCompression True
- Se você quiser fazer ambos os tipos de compressão, execute ambos os comandos:
cscript adsutil.vbs SET W3SVC/Filters/Compression/Parameters/HcDoStaticCompression True
cscript adsutil.vbs SET W3SVC/Filters/Compression/Parameters/HcDoDynamicCompression True
Essas configurações do IIS são para habilitar compressão para todos os sites de um servidor. Caso você queria fazer isso de maneira seletiva, isto é, por sites, leia esse artigo: http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/d52ff289-94d3-4085-bc4e-24eb4f312e0e.mspx?mfr=true
Para o SharePoint, normalmente opta-se por habilitar ambos os tipos… mas a sua escolha vai depender muito da arquitetura do seu site/sistema e da capacidade do seu servidor.
A compressão estática é para aqueles arquivos de conteúdos estáticos, como txt, html, htm, etc… A compressão dinâmica é para aqueles arquivos de conteúdo dinâmico, gerados em tempo de execução. Para arquivos estáticos, o IIS fará uma compressão no primeiro request por ele que receber e armazenará esse arquivo comprimido localmente, no local que você indicar (ou %Windir%\IIS Temporary Compressed Files por default). No caso da compressão dinâmica, a compressão ocorre em memória e a cada request, uma nova compressão é feita. Para maiores detalhes, leia como o HTTP Compression funciona aqui: http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/d52ff289-94d3-4085-bc4e-24eb4f312e0e.mspx?mfr=true
Agora, precisamos editar quais são os arquivos que serão comprimidos pelo IIS. Por padrão, o IIS possui a seguinte lista de arquivos:
| Modo de Compressão | Tipos de arquivos |
| Estático | .txt, .htm, e .html |
| Dinâmico | .exe, .dll, e .asp |
Em uma máquina com SharePoint, aparecerão também as extensões .js, .css e .htc na lista de arquivos estáticos.
Existem dois esquemas de compressão: GZIPe DEFLATE. Por motivos de compatibilidade, recomenda-se que você habilite ambos. Repare que nas linhas de comando que se seguirão, existe sempre o mesmo comando tanto para editar os tipos de arquivos em GZIP como em DEFLATE.
Alguns pontos interessantes para se pensar são:
- Arquivos de imagem
- Aspx
- Arquivos de flash e silverlight
- Arquivos de Office.
Vamos falar sobre cada um deles.
Arquivos de imagem na internet normalmente já são comprimidos por si só. Não faz muito sentido colocá-los na lista para serem recomprimidos pelo IIS… E é muito difícil imaginar que alguém colocaria um bmp na internet hoje em dia. Mas, como tudo é possível, e se você usar arquivos de bmp no seu site ou se vc precisar de qualquer ganho que uma compressão possa te trazer, você poderá adicionar essas extensões à compressão estática/dinâmica. Os arquivos que estão dentro de document libraries do SharePoint serão comprimidos pelo modo dinâmico.
Todas as páginas do SharePoint são em ASPX. Se você criar novas páginas, serão também em ASPX. Vale a pena editar a lista de extensões para compressão dinâmica e adicionar o aspx também.
Arquivos de silverlight ou flash não são arquivos pequenos… e o ganho em comprimi-los é muito pequeno. Não vale a pena mesmo.
O ganho em compressão para arquivos do Office são relativamente bons, mas se você tiver diversos tipos de arquivos sendo baixados do seu site com grande freqüência, isso pode acabar com a performance do seu servidor. Se você tiver uma demanda desse tipo, vale mais a pena armazenar os arquivos já compactados na document library. O que eu já vi também era uma webpart de zip-on-demand, onde a pessoa escolhe quais documentos ele irá baixar e quando clica-se para baixar, essa webpart gera um .zip com os arquivos que a pessoa pediu.
Um ponto importantíssimo, é que se você desejar compactar arquivos dentro das document libraries, não esqueça também de adicionar à sua lista de extensões para compactação dinâmica o .dll. Se você não fizer isso, não adianta que ele não vai conseguir compactar…
Considerando que você vá fazer compressão de imagens e de arquivos normais do SharePoint, você precisará, então, executar os seguintes comandos para editar as extensões:
- Habilitar GZIP
cscript adsutil.vbs SET W3Svc/Filters/Compression/GZIP/HCDoStaticCompression True
cscript adsutil.vbs SET W3Svc/Filters/Compression/GZIP/HCDoDynamicCompression True
- Habiltiar DEFLATEcscript adsutil.vbs SET W3Svc/Filters/Compression/DEFLATE/HCDoStaticCompression True
cscript adsutil.vbs SET W3Svc/Filters/Compression/DEFLATE/HCDoDynamicCompression True
- Compressão Estática
cscript adsutil.vbs SET W3SVC/Filters/Compression/deflate/HcFileExtensions "htm" "html" "txt" "js" "css" "htc" "gif" "jpg"
cscript adsutil.vbs SET W3SVC/Filters/Compression/gzip/HcFileExtensions "htm" "html" "txt" "js" "css" "htc" "gif" "jpg"
- Compressão Dinâmica
cscript adsutil.vbs SET W3SVC/Filters/Compression/deflate/HcScriptFileExtensions “asp” "exe" "dll" "aspx" "js" "css" "ascx" "gif" "jpg"
cscript adsutil.vbs SET W3SVC/Filters/Compression/gzip/HcScriptFileExtensions “asp” "exe" "dll" "aspx" "js" "css" "ascx" "gif" "jpg"
Repare que em ambos os modos de compressão, as extensões .js, .css, .gif e .jpg foram adicionadas. Isso se deve ao fato de que muitas vezes acabamos usando esses arquivos para montar o site no SharePoint e aproveitamos as document libraries do SharePoint para armazená-los.
Falta agora somente configurar a taxa de compressão dinâmica. A compressão estática por default é 10, pois essa compressão será feita só uma vez e depois o arquivo comprimido será armazenado localmente.
Determinar o nível de compressão deve ser feito de acordo com a necessidade e impacto na performance. Se você colocar nível 10 pra compressão dinâmica e a performance do seu servidor não ficar boa, reduza… Talvez 7 ou 6. Valide com sua equipe de infra-estrutura para ter certeza de que com o mínimo de impacto você consegue obter o resultado desejado.
Os comandos para configurar a taxa de compressão são:
- GZIP
cscript.exe adsutil.vbs SET W3Svc/Filters/Compression/GZIP/HcDynamicCompressionLevel "9"
- DEFLATE
csript.exe adsutil.vbs SET W3Svc/Filters/Compression/DEFLATE/HcDynamicCompressionLevel "9"
Repare que coloquei 9 como nível de compressão. Normalmente, para o SharePoint 9 é um bom número.
Lembre-se: Para que as alterações nas configurações do IIS passem a vigorar, você precisará dar um iisreset.
Para você testar, você pode usar o HTTP Fiddler. Essa é uma ferramenta gratuita e que você pode instalar na sua máquina ou no próprio servidor para verificar se ele está compactando os pacotes.
Bem… é isso… Caso vocês encontrem algum erro ou tenham algo a acrescentar, por favor, me avisem!
Hi everyone!
The settings to enable IIS Compression on a server that has SHarePoint on it are quiet simple!
There are 5 steps to accomplish it.
- First add and install the GZIP web service extension.
- Go to Start >> Administrative Tools >> Internet Information Services (IIS) Manager
- Click on Web Service Extensions and then in Add a new Web Service Extension…
- Choose a name and put it in Extension name: (GZIP for exemaple), check the Set extension status to Allowed option, and then click Add...
- In the Text Box Path: put in C:\Windows\system32\inetsrv\gzip.dll as the path. Then hit OK.
Remember that C:\Windows is your Windows installation path, and it should be changed to the actual path if you installed it in another one. - For last, hit OK.
- Then, you should choose if you will use the static, dynamic or both. I would sugest you do both, but it will depend on your server hardware.
- To enable only static compression, go to C:\Inetpub\AdminScripts.and type in:
cscript adsutil.vbs SET W3SVC/Filters/Compression/Parameters/HcDoStaticCompression True - To enable only dynamic compression, go to C:\Inetpub\AdminScripts.and type in:
cscript adsutil.vbs SET W3SVC/Filters/Compression/Parameters/HcDoDynamicCompression True - To enable both static and dynamic compressions, go to C:\Inetpub\AdminScripts.and type in:
cscript adsutil.vbs SET W3SVC/Filters/Compression/Parameters/HcDoStaticCompression True
cscript adsutil.vbs SET W3SVC/Filters/Compression/Parameters/HcDoDynamicCompression True
- Now you need to enable the GZIP or DEFLATE compression schemas. You should enable both for compatibility purposes:
- To enable the GZIP compression schema, go to C:\Inetpub\AdminScripts.and type in:
cscript adsutil.vbs SET W3Svc/Filters/Compression/GZIP/HCDoStaticCompression True
cscript adsutil.vbs SET W3Svc/Filters/Compression/GZIP/HCDoDynamicCompression True - To enable the DEFLATE compression schema, go to C:\Inetpub\AdminScripts.and type in:
cscript adsutil.vbs SET W3Svc/Filters/Compression/DEFLATE/HCDoStaticCompression True
cscript adsutil.vbs SET W3Svc/Filters/Compression/DEFLATE/HCDoDynamicCompression True
- Now you need to select what files get to be compressed. In the examples shown below, I’ve chosen to compress js, css, gifs and jpgs, both in static as in dynamic schemas… that’s because I wanted to get as low as I could in bandwith consumption, and because in the site created, there were some css, js, gifs and jpgs in SharePoint document libraries. To enable that kind of compression, you must also enable dll in the dynamic schema. As SharePoint has only aspx pages, enable them to be compressed as well.
- Static compression file extensions
cscript adsutil.vbs SET W3SVC/Filters/Compression/deflate/HcFileExtensions "htm" "html" "txt" "js" "css" "htc" "gif" "jpg"
cscript adsutil.vbs SET W3SVC/Filters/Compression/gzip/HcFileExtensions "htm" "html" "txt" "js" "css" "htc" "gif" "jpg" - Dynamic compression file extensions
cscript adsutil.vbs SET W3SVC/Filters/Compression/deflate/HcScriptFileExtensions “asp” "exe" "dll" "aspx" "js" "css" "ascx" "gif" "jpg"
cscript adsutil.vbs SET W3SVC/Filters/Compression/gzip/HcScriptFileExtensions “asp” "exe" "dll" "aspx" "js" "css" "ascx" "gif" "jpg"
- The final step, is to ajust the dynamic compression level. You should try some different levels of compressio to see which one will give you the best results for the least amount of hardware needed. 9 is usually a good compression rate for SharePoint. To do this, go to C:\Inetpub\AdminScripts.and type in:
- GZIP
cscript.exe adsutil.vbs SET W3Svc/Filters/Compression/GZIP/HcDynamicCompressionLevel "9" - DEFLATE
cscript.exe adsutil.vbs SET W3Svc/Filters/Compression/Deflate/HcDynamicCompressionLevel "9"
Remember, for any of these configurations to work, you’ll need to restart your IIS by typing iisreset in the command prompt window.
After that, to test if the compression is working, you can use the HTTP Fiddler tool.
Well, that’s it… if you find any mistakes, please, let me know!