Publicado el Sábado 01 de Septiembre del 2007 @ 23:45 por Armonth.
Optimizando varios puntos de SigT me encuentro con que podemos recurrir a una técnica que nos va a ser de mucha utilidad: juntar imágenes para ahorrar peticiones HTTP.
La idea básica la tomo de WebSiteOptimization donde nos dan una premisa simple:
Si bien lo que nos recomienda el sitio es usar un mapa nosotros vamos a ser mucho más simples: CSS. Para ver las ventajas vamos a dar como ejemplo SigT antes y después.
Cada vez que se carga una página en SigT se realizan aproximadamente 18 peticiones HTTP (19 si contamos que he separado los hacks de Internet Explorer a un fichero hack-ie.css).
El número depende en parte de cada página, del número de imágenes a cargar, etcétera. Pero podemos decir que hay un número de imágenes fija que siempre se carga y el número de peticiones HTTP estará influenciado por todo esto y por el Keep Alive. Entre las imágenes de SigT destacan los iconos: 4 iconos (aunque podrían ser más) que significan:
La imagen que tenemos a la derecha de éste texto que he llamado — de forma cutre — icon-set.gif reune esos cuatro iconos con el espacio justo… en 1.6KB. La idea es simple: juntar las imágenes (sobretodo recomendable con las pequeñas que generan peticiones pero envían muy pocos datos) en una sola y luego elegir mediante CSS la que utilizar.
Las ventajas son:
Si bien el uso de keep alive minimiza el número de peticiones seguiremos contando con la ventaja de que, se use o no keep alive, el número de peticiones no será superior al de objectos que conforma la web por lo que si tenemos 100 iconos en portada… ejem…
Las desventajas son:
No es una técnica nueva y el uso de CSS es muy básico, funciona (salvo alguno que no conozca) en todos los navegadores que soportan CSS.
Cada uno de los cuatro iconos hasta ahora era cargado mediante la propiedad background: de CSS y eso no va a cambiar.
Si antes llamaba a una imagen de esta manera:
XHTML:
<p class="fecha">Código de la fecha</p>
CSS:
.fecha {
background: url(img/fecha.gif) no-repeat left center;
}
Ahora lo haremos igual pero el CSS será:
.fecha {
background: url(img/icon-set.gif) 0 -16px no-repeat;
height: 16px; width: 16px;
}
Solamente hace falta saber:
El ancho y alto de cada imagen de forma individual (por ejemplo con el Photoshop/Gimp puedes seleccionar el trozo de imagen como si fueras a rodearlo y verás el tamaño).
Nota: el ancho si son imágenes puestas en vertical (no hay una imagen a la derecha de otra imagen, ni espacio en blanco) no es necesario.
La posición del trozo de imagen que nos interesa.
El segundo punto puede ser el más complejo, pero en realidad es fácil: el primer número es la anchura donde empezar y el segundo la altura, en realidad es una cuadrícula X/Y.
Para hacerlo fácil: con el Gimp y la herramienta de selección de rectángulos id con el puntero del ratón a la esquina arriba-izquierda de donde empieza la parte de imagen que nos interesa, abajo a izquierda nos pondrá dónde está situado el puntero. Si pone “0,13″ significa que la imagen empieza en 13º pixel en lo que es altura por lo que en el CSS pondremos “0 -13px”.
Si os fijáis, la imagen que corresponde al icono de “trackback” (el segundo de arriba a abajo) empieza en el 13º pixel. En realidad es muy fácil y cuesta más de explicar que de hacerlo.
Y con eso las peticiones bajan de 18 a 15 pudiendo añadir cualquier otra imagen al set para reducir peticiones, por ejemplo el logo.
Gracias, estos truquillos siempre están bien para ir reduciendo poco a poco el peso de las webs
Muy interesante… este tipo de posts me encantan.
Lo aplicaré en cuanto tenga tiempo.
Mirando mas información sobre este tema he visto que lo aplican algunos themes de wordpress. Lo aplican las grandes páginas con muchas visitas?
En las imagenes que me he bajado de algunas páginas (con trafico importante) no se muestran en mosaico por lo que no lo deben aplicar esta tecnica
¿Acaso no les sale a cuenta?
El único problema que le veo es cuando el alto del elemento es variable, al subir el tamaño de la letra verás los demás iconos jeje. Yo he visto esta técnica cuando usan una imagen para :hover y :active además del estado normal.
Pues a mi me va a venir de perlas, ya que hago muchas peticiones, lo malo es ver cuando tengo un ratillo para implementarlo :P
Me ha encantado el comentario. Voy a aplicarlo en mis proyectos de ahora en adelante. Saludos!
Yo utilizo desde hace bastante tiempo una técnica similar que no sólo ahorra peticiones, sino que además simula el clásico efecto de rollover.
Simplemente se basa en crear una de las imagenes idéntica a la otra, con ligeros cambios (blanco y negro o jugar con colores, que suele quedar bastante bien) y combinarla con el hover CSS (usando un enlace, para que sea compatible con IE también).
Genial el post.
Saludos,
Yo la venía utilizando con los fondos. En vez de tener varias imágenes, lo únificaba en un sólo fondo más grande (siempre sopesando tamaño de la imagen/peticiones). Aunque no lo había usado en iconos o botones :-O
La pega, como comentan más arriba es cuando tienes configurado el texto a un tamaño mayor, bien desde el propio navegador (como en el Firefox) o también desde la propio configuración del SO (este es mi caso, como estoy medio cegato el texto por defecto suele aparecer más grande). Éste es el resultado de tu página.
Una solución sería dejar más separación entre los iconos. En PNG, estos espacios vacios o de color plano apenas aumentan el tamaño del fichero, incluso con imágenes muy grandes (y si usas el optimizador de png’s “PNGOUT” mucho mejor).
Si hay imágenes múltiples y de tamaños variados, que es mejor utilizar para disminuir la cantidad de peticiones en el css?, he andado tratando de mejorar esto, alguna recomendación?, saludos