Descargar en paralelo el sprite de css

Hace unas semanas participe del concurso webperf-contest. Un excelente concurso de WPO con un claro objetivo: mejorar la perfomance de un sitio. Para lograr eso reescribí todo el código frontend aplicando todas las técnicas de WPO que sabía:
  • Unificar y poner en el head todo el CSS
  • Unificar el Javascript
  • Cargar los Javascript de forma Async
  • Compactar el JS, CSS y HTML
  • carga de imágenes on demand (mi propio plugin)
  • Configurar los cache headers
  • Sacar el CSS sin usar
  • Sacar el JS sin usuar
  • Hacer un sprite o dataURI/MHTML para imagenes background
  • Ejecutar el JS extra después del evento onLoad
  • Unificar los Ajax request
  • Cargar el icon de forma Async
  • Armar las sombras y bordes redondeados con CSS3
  • Optimizar el tamaño de las imágenes
  • Precargar el Iframe y setear el src en un timer
  • Separar en varios dominios base para aumentar la descarga en paralelo

El nuevo Tip

Además, tratando de lograr un mejor tiempo del evento StartRender me di cuenta que la carga del sprite es clave para lograrlo.

En la forma normal de cargar el css y el sprite

El navegador empieza a descargar la imagen cuando encuentra una regla de sprite en el css que coincide con un tag del body.

ej:
-HTML document
......
<link ref="stylesheet" type="text/css" href="style.css" />
</head>
<body>
.....
-Style.css
....
body{ background-image:url(sprite.png); }
...
En este caso el navegador descarga primero el css y luego el sprite, la descarga es 100% secuencial.
Prueba el online demo (el style esta con un sleep para la demo ).

Descargar Css y sprite en paralelo

Podemos precargar la imagen en el head usando un clasico script como este:
-HTML document
......
<script>
setTimeout(function(){
    var s = document.createElement('image');
    s.src =  'sprite.png';
    (document.getElementsByTagName('head')[0]).appendChild(s);
},5);
</script>
<link ref="stylesheet" type="text/css" href="style.css" />
</head>
<body>
Ahora, el navegador va a descargar el css y el sprite en paralelo, esto hace que tenga mucho mas rápido el sprite.

Prueba el Online Demo.

Conclusión

En mi opinión dataUris/MHTML de Stoyan es mucho mejor técnica, porque nos ahorramos el request del sprite. Sin embargo cuando usamos dataUris tenemos que guardar los datos de la imagen en base64 esto resulta en un 20% mas aprox. También es verdad que es mucho mas común el uso de sprites. Así que para mi es una buena idea descargar en paralelo el sprite.
Comentarios bienvenidos.
Martín :)
This entry was posted in performance and tagged , , , , , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

2 Comments

  1. Posted 2011/05/02 at 12:31 | Permalink

    Muy interesante! Para cuándo el post explicando el plugin para cargar las imágenes on demand? no trae problemas con el SEO usar esa técnica??

  2. Posted 2011/05/03 at 10:11 | Permalink

    Javi: ya existe el post: http://tips.freedev.com.ar/performance/load-images-ondemand-and-get-faster-web/, tene en cuenta es por ahora es la unica técnica conocida crossbrowser. Si vos queres que las imagenes de tu site aparezcan el los buscadores no debes usarla.
    Saludos

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>