InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
También puedes ver ...
SubVersion y Visual Studio
Usuarios del sistema en Windows (servicios)
Encriptación con AES Rijndael - Ejemplo
TripleDES - Un ejemplo practico en C#
Templates css para web
Insertar una marca de agua en documentos PDF
IIsAdmin.NET - Como tener mas de un sitio web en IIS en Windows XP
SoapUI - Excelente aplicacion para probar Web Services
Ejecutar un servicio WCF desde PHP
Serialización: XmlSerializer y BinaryFormater


Introducción

En ocasiones el rendimiento de una web puede verse afectado por su flujo de datos, ya que si este es muy grande, el tiempo de carga de las páginas es mucho mayor. Sobre todo, si la conexión a internet del usuario no es muy rápida.

Existen varios mecanismos para mejorar el rendimiento de una página web, como por ejemplo, la optimización de las operaciones realizadas en el servidor, una gestión adecuada de la caché, tanto de cliente como de servidor, la compresión de la respuesta de la página, etc.

En este artículo me voy a centrar en la compresión, aunque no descarto hablar sobre la caché más adelante, ya que la combinación de ambos métodos da muy buen resultado en rendimiento.

 

Compresión de páginas web

La mayoría de los navegadores soportan compresión por “gzip” y por “deflate”, pero existe la posibilidad de que no sea así, por lo que en primer lugar tendremos que decidir si aplicar o no compresión. Esto lo haremos comprobando la cabecera “Accept-Encoding” de la petición con la siguiente propiedad:

 

/// <summary>

/// Comprueba si se puede utilizar gzip o deflate

/// </summary>

/// <returns></returns>

public bool IsAceptaCompresion

{

get

{

string aceptaCodificacion = Request.Headers["Accept-Encoding"];

 

return (!String.IsNullOrEmpty(aceptaCodificacion) &&

(aceptaCodificacion.Contains("gzip") ||

aceptaCodificacion.Contains("deflate"))) ? true : false;

}

}

 

Una vez sabemos si el navegador soporta compresión, aplicaremos el filtro a la respuesta de la página de la siguiente manera:

 

if (IsAceptaCompresion)

{

string aceptaCodificacion = Request.Headers["Accept-Encoding"];

 

if (aceptaCodificacion.Contains("gzip"))

{

Response.Filter =

new GZipStream(Response.Filter, CompressionMode.Compress);

Response.AppendHeader("Content-Encoding", "gzip");

}

else if (aceptaCodificacion.Contains("deflate"))

{

Response.Filter =

new DeflateStream(Response.Filter, CompressionMode.Compress);

Response.AppendHeader("Content-Encoding", "deflate");

}

}

 

En el caso de que hubiera un proxy entre el servidor y el cliente o tuviésemos caché en la página, deberíamos distinguir entre contenido comprimido o normal. Si no lo hiciésemos podríamos obtener  una ristra de letras y números que nada se parecería al resultado esperado. Esto se puede controlar agregando la siguiente línea:

Response.AppendHeader("Vary", "Content-Encoding");

 

Conclusión

La compresión de páginas reduce significativamente (60% - 70%) el tráfico de datos entre el servidor y el cliente, a cambio, claro está de reducir el rendimiento en el servidor.

Si estamos ante una aplicación en la que el número de peticiones es muy alto, mi recomendación es aplicar esta práctica únicamente a páginas cacheadas, de modo que la compresión solo se realice la primera vez que la página se sirve.


 Versión para imprimir  Foros de consulta

 
Genial por Devjoker
Respuesta recibida el [02/03/2009 10:53:11]
Genial David, hoy mismo lo pruebo!


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



 Versión para imprimir

Compresión por gzip y deflate
Autor: David Andres.
Visitas: 1408 Fecha de publicación: 02/03/2009
David es analista y desarrollador de aplicaciones web cliente-servidor especializado en ASP.Net. En sus años de experiencia ha participado en proyectos para importantes empresas y entidades como Panda Security, Merck Sharp And Dohm, el gobierno de Navarra o Repsol. Conoce a fondo todas las versiones del framework .Net, bases de datos SQL Server y Oracle, y otras tecnologías como MS SharePoint y W4 Workflow. En desarrollo domina los lenguajes C#.Net, VB.Net, Java (J2EE, Struts), C, C++, JavaScript, T-SQL y PL/SQL entre otros.




Visitas: 87 | Comentarios: 2 | Archivo: Articulos
02/02/2010 iPad vs Telesketch
Visitas: 792 | Comentarios: 2 | Archivo: Articulos
Categorias: Humor
Visitas: 742 | Comentarios: 3 | Archivo: Articulos
Visitas: 3137 | Comentarios: 2 | Archivo: Articulos
Categorias: C#
Visitas: 14494 | Comentarios: 7 | Archivo: Articulos
Categorias: C#|Seguridad
Visitas: 1474 | Comentarios: 3 | Archivo: Articulos
Visitas: 691 | Comentarios: 2 | Archivo: Articulos
Visitas: 368 | Comentarios: 0 | Archivo: Articulos
Visitas: 2007 | Comentarios: 2 | Archivo: Articulos
Categorias: C#

Útimos temas recibidos en los foros ...
quiero saber en que entidad estoy afiliada a cesantias y pensiones por adriana ... [WIN 98/NT/2000/XP] 23 28/11/2009
Certificado de afiliacion Pensiones y Cesantias por VIVIANA ... [Actualidad] 1 10/03/2010
certificado de pensiones del bbva horizonte por danger ... [Actualidad] 122 12/01/2010
CERTIFICADO por LIZETH ... [Actualidad] 0 11/03/2010
certificado de afiliación de pensiones y cesantias por secre ... [Actualidad] 111 28/01/2010
Solicitud certificado de afiliaciones a pensiones y cesantias proteccion por hz ... [Actualidad] 54 10/02/2010
certificado pensiones horizonte por angela patricia rodriguez ... [Actualidad] 135 26/01/2010
pensiones por eduard ... [Visual Basic 6.0] 0 11/03/2010
Manual Visual Studio.NET por Shiko ... [Visual Basic .NET] 41 26/10/2006
cap de setmana genial por ramón ... [Java] 0 11/03/2010
cetificado de pension por RICARDDO RAFAEL SOLANO ORZCO ... [Actualidad] 0 11/03/2010
solicitud de aifiliacion a porvernir por julios ... [Actualidad] 2 11/03/2010

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
22/10/2005 Vistas    forma parte de...Tutorial SQL
22/10/2005 Indices    forma parte de...Tutorial SQL
22/10/2005 Tablas    forma parte de...Tutorial SQL
07/11/2006 Enumeraciones    forma parte de...Tutorial C#
22/10/2005 Actualización de datos. UPDATE    forma parte de...Tutorial SQL
01/01/2006 Borrado de datos. DELETE    forma parte de...Tutorial SQL
28/06/2006 Propagacion de excepciones en PL/SQL    forma parte de...Tutorial PL/SQL
28/06/2006 Procedimientos almacenados en PL/SQL    forma parte de...Tutorial PL/SQL
22/10/2005 Insertar datos. INSERT    forma parte de...Tutorial SQL
05/12/2006 Manipulación de punteros    forma parte de...Tutorial C#

 

Encuesta
¿A que perfil te adaptas mejor?




[Ver] [Votar]