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
Alguns meses atrás a Microsoft anunciou o lançamento do Visual Studio 2008 para o ano de 2008 (parece fazer sentido).
O lançamento oficial será efectivamente a 27 de Fevereiro de 2008 mas está já disponível a versão RTM.
Para quem não está a seguir RTM significa "release to manufacturing".
Para os early adopters estão já disponíveis versões trial do VS 2008 ou as express (gratuitas) já disponíveis.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5