2009-06-06 6 views
6

Me preguntaba si alguien tiene alguna estrategia para optimizar la precarga de imágenes a través de javascript?Optimizar javascript pre-cargar de imágenes

Estoy portando una aplicación Flash en html/css, intentando recrear la interfaz de usuario tan cerca del sitio original como sea posible. Es esencialmente una aplicación de navegador de fotos, donde se muestra una imagen de alta resolución cuando el usuario se desplaza sobre un enlace. Hay alrededor de 50 a 80 de estas imágenes por página.

La precarga de todas las imágenes individualmente crea un tiempo de carga significativamente mayor que el de la aplicación Flash. La cantidad de datos es la misma, pero debo suponer que el mayor tiempo de carga se debe al número de viajes de ida y vuelta que se deben realizar en el servidor para cada imagen.

Además, estoy mirando un tiempo de carga significativo para cada página incluso después de que las imágenes hayan sido almacenadas en caché, porque la página aún necesita contactar al servidor para que cada imagen reciba el código 304 No modificado.

¿Alguien tiene alguna sugerencia para acelerar esto? ¿Tendría sentido intentar crear un enorme elemento de imagen que se descargue en una sola solicitud en lugar de 50 a 80 imágenes más pequeñas que cada una de ellas recibe una sola solicitud? El objetivo aquí es lograr un tiempo de carga similar al sitio Flash.

Gracias. Sé que esto no suena como una forma ideal de hacer las cosas.

Respuesta

4

Como usted ha señalado - uno de los factores más comunes que influye en los tiempos de carga de páginas web modernos son el gran número de pequeñas imágenes que se envían entre el cliente y el servidor. Algunos estudios recientes indican que para más de 20 imágenes, el 80% del tiempo de carga se va a gastar en la latencia de hacer esto, ¡y no en la descarga!

Una herramienta llamada SmartSprites es una forma muy práctica de "compilar" una única imagen grande de todas sus muchas pequeñas imágenes que lograrán tiempos de carga mucho más rápidos y la captación previa de imágenes. Aquí está el enlace http://smartsprites.osinski.name/

+1

¿Alguna posibilidad de que pueda vincular a esos "estudios recientes"? Me interesaría saber más sobre eso. –

+0

Ya, lo siento, descuidado! Aquí está la cita, pero puede leer más sobre esto en contexto aquí: http://www.websiteoptimization.com/speed/tweak/parallel/ Yuan, J., Chi, CH, y Q. Sun, " Un modelo más preciso para la recuperación web, " WWW 2005, 10-14 de mayo de 2005, Chiba, Japón. Los investigadores encontraron que el Tiempo de definición (DT) y el Tiempo de espera (WT) de los objetos tienen un impacto significativo en el total latencia de recuperación de objetos web, sin embargo, se ignoran en gran medida en los estudios a nivel de objeto. El DT y el WT componen del 50 al 85% del tiempo total de espera, dependiendo del número de objetos en una página. –

1

Yo diría que usar CSS sprites es uno grande. Tener todas tus imágenes, o imágenes de una naturaleza similar en una sola solicitud HTTP, realmente ayuda a cargar el tiempo. Descargar 10 imágenes con un tamaño de archivo total de 100kb va a ser más lento que descargar 1 imagen del mismo tamaño. También ayuda a que las imágenes bajen antes de que se requieran en el caso de los eventos de desplazamiento y mouse sobre eventos y generalmente hacen las cosas mucho más suaves.

0

Si no necesita todas las imágenes de inmediato, puede utilizar la función window.timeout() para hacer algunos de los trabajos después de la página se ha inicializado.

Además, si utiliza una imagen en varios lugares, puede evitar varias llamadas al servidor colocando la imagen en un estilo CSS y reutilizando ese estilo en lugar de la imagen.

1

Usar un sprite es bueno si está bien con esa solución. Además, lo que intentaré es detectar URI de datos en ese navegador y hacer que el script cargue diferentes hojas de estilo basadas en esa información. Una hoja de estilo con URI de datos codificados en base 64 y la otra con una URL real para el elemento sprite. El archivo CSS también es almacenable en caché.

Aquí hay un technique to detect data URIs support o puede utilizar IE comentarios condicionales o ... hay algunos workarounds for sending IE encoded image strings, en respuestas HTTP de varias partes.

Cuestiones relacionadas