Optimización de la carga de la Web en ASP.NET

Google a amenazado con afectar al posicionamiento en las SERP’s según la velocidad de carga de la web. Para mejorar la velocidad de carga hay varias cosas importantes y fáciles de implementar en ASP.NET (Todo basado en que estés usando IIS 7.0). Obviamente asumo que lo básico como que las imágenes estén optimizadas y que el html no es todo comentarios y tablas vacías ya está aplicado.

compresion GzipLa primera de ellas es activar la compresión gzip que basta con entrar al administrador del IIS elegir la Web y activar los dos checkbox de compresión.

Puedes comprobar que estás comprimiento en gzip en http://www.whatsmyip.org/http_compression/

En segundo lugar es interesante que los contenidos estáticos tengan un tiempo de caché definido para el cliente. De forma que los navegadores no se los descarguen de la web cada vez que la visitan. He probado la opción de hacerlo desde la administración del IIS7 pero al probarlo el Page Speed seguía indicando “Leverage browser caching” por lo que mejor recomiendo la opción de cambiar el Web.config incluyendo el código siguiente:

<?xml version="1.0" encoding="UTF-8"?>
   <configuration>
     <system.webServer>
        <staticContent>
           <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="10.00:00:00"  />
        </staticContent>
    </system.webServer>
</configuration>

Puedes probar que la espiración de los contenidos estáticos se está haciendo con el page speed.

El tercer punto consiste en minimizar el número de peticiones que hace el navegador del cliente al servidor. Hay dos puntos importantes:

1º las pequeñas imágenes que se usan repetidamente en la web deberían estar juntas en un sólo archivo de imagen y mostrarlas usando la técnica de css sprites. He buscado con G y este artículo creo que te puede ayudar a implementarlo sin muchas complicaciones. http://www.kabytes.com/programacion/tutorial-basico-sobre-css-sprite/

2º Algunas webs tienen múltiples .js y .css y cada uno de ellos implica una petición al servidor. Es buena idea combinarlos en un solo .js y un solo .css (el css en el head y el js en el pie de la página). Claro que no siempre necesitamos todo lo que hay definido en el css ni todo lo que hay en el js y tenerlos juntos implica mayor complejidad en edición de los mismos.

Puedes utilizar HttpCombiner o si el proyecto te permite gastar unos euros http://wao.mono-software.com te permite hacer todo lo anterior en versiones del iis antiguas. Para verificar que estás comprimiendo los css y los js tendrás que ver el css generado (cargándolo directamente en tu navegador) y en vez de ver el css con sus espacios y tabulaciones encontrarás una sola línea con todo el css junto.

En ASP.NET tienes otras dos formas de acelerar tu web que has de estudiar con cuidado.

1º Optimizar la generación de la web. ¿sabes cuanto le cuesta al server ejecutar cada SQL? ¿Cuanto tiempo le cuesta acceder a disco o el resto de tareas? En una web en desarrollo puedes fácilmente incluir este código en el web.config

<system.web>
<trace enabled=”true” pageOutput=”false” localOnly=”false” requestLimit=”10000″ mostRecent=”true” />
 <system.web>

    <trace enabled="true" pageOutput="true" localOnly="false" requestLimit="10000" mostRecent="true" />

</system.web>

Y en cada punto que quieras chequear el comportamiento de tu página añadir trace.write(SQL) para ver la consulta y el tiempo de ejecución usado. La información que te genera es muy útil para depurar sobretodo ver en que punto es más fácil mejorar la programación de tu web. Aquí tienes un ejemplo de lo que genera el trace.

2º Activar el cacheado de tus páginas. ASP.NET de forma nativa puede cachear todas las páginas dinámicas de tu web por el tiempo que quieras y según los parámetros de url recibidos.

Hay muchas más cosas que se pueden aplicar pero como siempre prefiero centrarme en el 20% de trabajo que proporciona el 80% de los resultados.

¿eres fan de php? puedes explicarme lo genial y buenísimo que es hasta que te aburras pero lo siento php no compite con el asp.NET, como lenguaje de programación el .NET juega en otra liga.

9 thoughts on “Optimización de la carga de la Web en ASP.NET

  1. Seozaragoza on

    Muy bueno el artículo, se ven muy pocos para ASP.
    Lo acabo de probar con IIS6 y no logro hacer que cachee¿sabes como?

    Saludos

  2. bertonieto on

    Esa pregunta me parece muy interesante, porque he estado un rato intentandolo y me ha sido imposible, esto no cachea nada…

  3. José B. Moreno Suárez on

    Como álgún talibán de PHP lea la pregunta final….vas a tener un montón de comments XD

  4. Kico on

    he escrito el artículo en base al is7.0 la verdad es que en iis6 la caché la puedes activar igualmente pero ha de ser todo a través del webconfig. y agregando en cada página el control de caché:
    < %@ OutputCache VaryByParam="parametro" Duration="86400" %>

  5. mdemena on

    Muchas gracias, me ha sido de mucha utilidad!!!

  6. Un buen post. Me alegra ir encontrando información de este tipo sobre la optimización en el rendimiento en ASP.net. Como tú muy bien dices hay modificaciones simples y rápidas que obtienen un resultado buenísimo. Aunque cada vez se hace más complicado rascar milisegundos en la carga. En un portal con una alta carga de tráfico concurrente, ahorrarse un Kb en la carga, puede ser determinate. Además tener en cuenta la optimización de la base de datos, arquitectura, configuración a nivel de sistemas, etc.

    En algunos de mis post explico algunos consejos también interesantes para optimizar el rendimiento:
    http://www.josecuellar.net/tag/rendimiento/
    http://www.josecuellar.net/tag/optimizacion/

    Salu2!

  7. Edgar Hernandez on

    Muy bueno tu articulo y coincido tu ultimo comentario ” .NET juega en otra liga.” sin desmeritar a ninguna otra tecnología.

  8. JesusErsono on

    Justo lo que estaba buscando.
    Muy bueno el articulo para el WPO, normalmente todo lo que encuentro es para linux. Y acabo de tener mi primer cliente con un alojamiento en Windows :).
    Gracias.

  9. Pingback: Cómo mejorar la velocidad de carga de una página web

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *