Habilitar la compresión dinámica (GZIP) para JSON en IIS/IIS Express

Una buena práctica cuando configuramos un servidor web es habilitar la compresión para las peticiones HTTP. En este post voy a hablar sobre cómo podemos comprimir las peticiones de tipo JSON a través de GZIP.

Configuración

Lo único que tenemos que hacer es incluir dentro del apartado httpCompression del archivo de configuración del servidor web el apartado dynamicTypes, en el caso de que no existiera, e incluir los mime types de las peticiones que queremos comprimir. Esta operación se puede realizar de varias maneras:

A través de consola con appcmd:

[plain]%windir%system32inetsrvappcmd set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType=’application/json’,enabled=’True’]" /commit:apphost
%windir%system32inetsrvappcmd set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType=’application/json; charset=utf-8′,enabled=’True’]" /commit:apphost
[/plain]

Manualmente, modificando el archivo de configuración (applicationHost.config) del IIS de Windows (%windir%System32inetsrvconfig) o IIS Express (%userprofile%my documentsiisexpressconfig):

[xml highlight=»12,13″]<httpCompression directory="%SystemDrive%inetpubtempIIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%system32inetsrvgzip.dll" />
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
<dynamicTypes>
<add mimeType="application/json; charset=utf-8" enabled="true" />
<add mimeType="application/json" enabled="true" />
</dynamicTypes>
</httpCompression>[/xml]

O bien través de la interfaz de administración de IIS, donde sería necesario activar el módulo Dynamic Content Compression. En este punto serían necesarios más pasos y creo que es más tedioso.

Resultados

Para que veamos claro cuál es el beneficio de la configuración anterior, en la siguiente imagen se muestra una petición donde el contenido no ha sido comprimido:

JSON sin comprimir

Esto significa que la respuesta de esa petición tiene un tamaño de 2.2 MB, lo cual es una penalización demasiado importante para nuestro sitio. Una vez aplicados los cambios y reiniciado el pool del IIS, podemos ver que se ha mejorado considerablemente el tamaño de las peticiones:

JSON comprimido

Si nos fijamos bien en la imagen anterior, en el apartado Size tenemos dos valores: el primero de ellos nos indica cuál es tamaño que se ha descargado del servidor remoto y el segundo cuál es el peso real del recurso. Otro dato importante, con el fin de detectar que nuestras peticiones se están comprimiendo, es el valor de la columna Content-Encoding (esta columna no está visible por defecto en Chrome), donde en la segunda imagen podemos comprobar que está utilizando gzip.

Espero que sea de utilidad.

¡Saludos!

4 Comments

  1. David Gonzalo (@DaGoPe) enero 23, 2014 at 9:29 am

    También puedes hacer uso de un compresor como JSONH https://github.com/WebReflection/JSONH y la mejora se nota mucho.
    Supongo que aplicando ambas técnicas la mejora aún será mayor.
    Pero si no tienes poder para configurar el IIS o bien por temas de burocracia de un proyecto no tienes acceso, el uso de JsonH puede ser una alternativa

    Un saludo,

    Reply
    1. Gisela enero 23, 2014 at 9:38 am

      ¡Muchas gracias por el aporte David! Está genial tenerlo en cuenta.

      ¡Saludos!

      Reply
  2. Alberto Silva enero 24, 2014 at 6:48 pm

    Hola,
    Congratulaciones por el tema, es verdaderamente importante en el mundo de dispositivos conectados en redes 3G/4G y todavía demasiadas veces olvidado.
    Eso funciona para la descarga de datos, pero un tema que quiero investigar hace unas semanas es usando la librería PCL de Web Api 2 Client, como subir los POST y PUT usando compressión.

    Reply
    1. Gisela febrero 12, 2014 at 10:48 am

      Muchas gracias por tu comentario Alberto,

      Lo cierto es que no he utilizado esa librería… ¡esperamos tus impresiones!

      ¡Saludos!

      Reply

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.