Quem programa para a web sabe perfeitamente que quanto mais pequeno o output de uma página mais rapidamente é efectuado o download da mesma.
Além da compressão do IIS (que compacta o pacote de dados e o browser descompacta), o objectivo é sem alterar qualquer html/xhtml, tornar uma página mais pequena. Vamos apenas cortar espaços e "quebras de linha".
De forma a tornar a utilização simples apenas é necessária a cada página, alterar a herança:
Ao invés de
public class _default : System.Web.UI.Page
colocamos
public class _default : CompressPage.
Ou em .net 2 sem code-behind simplesmente adicionar Inherits="CompressPage" ficando <%@ Page Language="C#" Inherits="CompressPage" %>
Como funciona?
Simplesmente elimina qualquer duplo espaço em branco tornando-o apenas num. Parece pouco?...
Utilizámos com bastante sucesso uma implementação semelhante no canal de cultura do sapo http://cultura.sapo.pt. O output da HP tem cerca de 17kb, isto usando UTF-8.
Ficamos com um output de cerca de 34% do original!
O tradeoff é um aumento de processamento médio de 0,005 segundos. Penso que negligenciável.
Segue a Class responsável pela compressão:
using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Web.UI;
public class CompressPage : System.Web.UI.Page
{
protected override void Render(HtmlTextWriter output)
{
// FIRST INITIATE AN STRING WRITER
StringWriter outputWriter = new StringWriter();
// GET THE UNCOMPRESSED OUTPUT
HtmlTextWriter normalOutput = new HtmlTextWriter(outputWriter);
base.Render(normalOutput);
normalOutput.Close();
// FINALLY WRITE IT DOWN AFTER COMPRESSION
output.Write(RemoveSpaces (outputWriter.ToString()));
}
private string RemoveSpaces(string origin)
{
origin = Regex.Replace(origin, "\\s+", " ");
origin = Regex.Replace(origin, "> <", "><");
origin = Regex.Replace(origin, "javascript\"><!--", "javascript\">");
origin = Regex.Replace(origin, "// --></script>\">", "</script>");
return Regex.Replace(origin, "//--></script>\">", "</script>");
}
}
Esta implementação implica alterar a base class de todas as páginas. Simples para quem usa uma página base de controller.
Outra solução "mais limpa" seria criar um simples http handler com o mesmo tipo de processamento.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5