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: 1403 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: 81 | Comentarios: 2 | Archivo: Articulos
02/02/2010 iPad vs Telesketch
Visitas: 786 | Comentarios: 2 | Archivo: Articulos
Categorias: Humor
Visitas: 725 | Comentarios: 3 | Archivo: Articulos
Visitas: 3116 | Comentarios: 2 | Archivo: Articulos
Categorias: C#
Visitas: 14470 | Comentarios: 7 | Archivo: Articulos
Categorias: C#|Seguridad
Visitas: 1462 | Comentarios: 3 | Archivo: Articulos
Visitas: 688 | Comentarios: 2 | Archivo: Articulos
Visitas: 367 | Comentarios: 0 | Archivo: Articulos
Visitas: 1983 | Comentarios: 2 | Archivo: Articulos
Categorias: C#

Útimos temas recibidos en los foros ...
certificado de afiliación de pensiones y cesantias por secre ... [Actualidad] 107 28/01/2010
Certificadoo por Francy ... [Actualidad] 0 10/03/2010
FORMULARIO ACCESS por jcifuentes ... [Access] 34 29/05/2007
certificado de pensiones del bbva horizonte por danger ... [Actualidad] 119 12/01/2010
Certificado por Francy ... [Actualidad] 0 10/03/2010
certificado de pensión y ses antias por hernan ... [Actualidad] 0 10/03/2010
Certificado de Penciones Horizonte por orlandossa ... [Actualidad] 4 09/02/2010
fondo de pensiones por mafe ... [Access] 0 10/03/2010
certificado del fondo de pensiones cc 10.491.465 santander de Q. por carlos andres cifuentes banguero ... [Actualidad] 9 17/02/2010
certificado de semanas cotisadaz por lis ... [Actualidad] 0 10/03/2010
certificado por arme ... [Actualidad] 0 10/03/2010
Quiero saber a que fondo de pensiones estoy afiliada por clau ... [Actualidad] 169 24/07/2009

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 ...
02/09/2007 Procedimientos almacenados en Transact SQL    forma parte de...Tutorial de Transact SQL
22/10/2005 El lenguaje SQL    forma parte de...Tutorial SQL
21/07/2006 Funciones integradas de PL/SQL    forma parte de...Tutorial PL/SQL
26/03/2009 Manejador de archivos .js y .css para compresión y caché
22/10/2005 Introducción SQL    forma parte de...Tutorial SQL
28/08/2006 Ubuntu en VmWare con VMware Tools
17/10/2006 Excepciones personalizadas en PL/SQL    forma parte de...Tutorial PL/SQL
22/10/2005 Insertar datos. INSERT    forma parte de...Tutorial SQL
22/10/2005 Consultar datos. SELECT    forma parte de...Tutorial SQL
22/10/2005 Consultas combinadas. JOINS    forma parte de...Tutorial SQL

 

Encuesta
¿A que perfil te adaptas mejor?




[Ver] [Votar]