Recentemente, fiz um post de como realizar compactação Gzip utilizando configurações no WebConfig . Hoje vou mostrar uma maneira na qual você poderá implementar em MVC. Fazendo a compactação da controller de maneira automática, simples e fácil.

Como a compactação via controller funciona?
- Os navegadores que suportam a compactação ( por padrão os novos navegadores suportam a compactação) enviam ao servidor a “aceitação” de conteúdo compactado
- O servidor web recebe a solicitação e se prontifica de utilizar a compactação gzip
- Após a compactação o servidor notifica o cliente com o conteúdo .zip já pronto para ser trafegado e transferido ao cliente, todo aquele conteúdo que trafegou na controller e saiu para view.

Agora, mão a obra!
Inicialmente vamos criar trecho de código similar a este
public class CompressFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpResponseBase response = filterContext.HttpContext.Response;
if (response.Filter is GZipStream || response.Filter is DeflateStream) return;
HttpRequestBase request = filterContext.HttpContext.Request;
string acceptEncoding = request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(acceptEncoding)) return;
acceptEncoding = acceptEncoding.ToLower();
if (acceptEncoding.Contains("gzip"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
else if (acceptEncoding.Contains("deflate"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
}
}
Resumidamente o que este código faz?
Bom, a classe envia o pacote de aceite ao cliente aceitando a compactação e a realiza pelo Gzip ou pelo Deflate ( que é outro método de compactação )
Agora basta adicionar o filtro de compactação na controller que você deseja compactar
[CompressFilter]
public class HomeController : Controller
{
}
Com isto você ganha mais performance!
Para uma leitura mais aprofundada, recomendo ler : https://developers.google.com/speed/articles/gzip
Obrigado a todos!
