2010-03-15 12 views
15

Bueno, tiene más que ver con las imágenes y la memoria en general. Si utilizo la misma imagen varias veces en una página, ¿se consolidará cada imagen en la memoria? ¿O cada imagen usará una cantidad separada de memoria?Pregunta rápida sobre sprites CSS y uso de memoria

Me preocupa esto porque estoy construyendo un sistema de desvelado para un dispositivo de escritorio de Windows, y estoy buscando reactivar las imágenes en el aspecto predeterminado para que pueda mantener el sistema de archivos en buen estado. Al mismo tiempo, quiero intentar mantener la huella de memoria al mínimo. Si termino con un único archivo que contiene 100 imágenes y vuelvo a usar esa imagen 100 veces en el gadget, no quiero tener problemas de rendimiento.

Saludos.

+1

¡Gran pregunta! +1 – Armstrongest

Respuesta

14

¿Qué hay de lo prueba? Cree una aplicación simple con y sin spriting, y controle su memoria de Windows para ver qué enfoque es mejor.

Te lo digo para probarlo debido a esto interesting post from Vladimir, incluso avalado por Mozilla "use sprites wisely" entrada:

(...), donde esta imagen se utiliza como un sprite. Tenga en cuenta que este es un PNG de 1299x15,000. Se comprime bastante bien - el tamaño de descarga real es de alrededor de 26K - pero los navegadores no procesan los datos de la imagen. Cuando se descarga esta imagen y se descomprime , usará casi 75MB en la memoria (1299 * 15000 * 4).

(Al final del post de Vladimir hay algunos otros grandes referencias para comprobar)

Dado que no sé cómo Windows hace que sea aparatos (y si no se va a manejar datos de imagen comprimidos), es difícil en mi humilde opinión decir exactamente qué enfoque es mejor sin pruebas.

EDIT: El funcionario Windows Desktop blog (no actualizado desde 2007) dice the HTML runtime used for Windows Gadgets is MSHTML, así que creo que una prueba de que realmente se necesita saber cómo su aplicación se ocuparía de los sprites CSS.

Sin embargo, si se lee parte de la documentación oficial Windows Desktop Gadgets y Windows sidebar, hay una cosa interesante acerca de su decisión de no utilizar sprites CSS, en la sección The GIMAGE Protocol:

Este protocolo es útil para añadir imágenes para el gadget DOM más de manera eficiente que la etiqueta estándar HTML . Estos resultados de eficiencia de mejora de la manipulación de miniaturas y imagen de almacenamiento en caché (que intentarán utilizar miniaturas de la caché de Windows si el tamaño solicitado es menor que 256 píxeles por 256 píxeles) cuando se compara a solicitar una imagen utilizando el archivo : // o http: // protocolos.Un beneficio adicional de del protocolo de gimage es que se puede especificar cualquier archivo que no sea un archivo de imagen estándar como fuente y el icono asociado con el tipo de ese archivo.

Intentaría utilizar este protocolo en lugar de sprites CSS y también realizar algunas pruebas.

Si ninguna de esta información lo ayudara, trataría de preguntar al Windows Desktop Gadgets official forums.

¡Buena suerte!

+0

Tenía la esperanza de evitar probarlo, pensé que podría ser bastante lento. Sin embargo, definitivamente es una opción. +1 para un enlace excelente, me explicó mucho e incluso podría haber respondido a mi pregunta. –

+1

@GmonC: re: tu edición, sugiriendo que el protocolo g: image sería una gran idea si fuera así de fácil. Desafortunadamente, se trata de una implementación relativamente defectuosa, algunas imágenes pueden aparecer borrosas al usarlas y es difícil obtener imágenes del tamaño que desea. –

+0

Bien investigado +1 – Armstrongest

5

La imagen se mostrará una vez en la memoria caché (siempre que la URL sea la misma y no haya ninguna cadena de consulta anexada al nombre del archivo). Spriting es el camino a seguir.

+0

¿Se refiere al almacenamiento en caché del sistema de archivos? Si es así, eso realmente no se aplica a los Gadgets de escritorio de Windows ya que se ejecutan en el sistema de archivos local de todos modos. El uso de la memoria es mi principal preocupación. –

+0

Quise decir el caché del navegador. Por lo que puedo decir, Windows Desktop Gadgets usa HTML/CSS/JavaScript/etc. Me sorprendería enormemente si funcionara de manera diferente para los gadgets. Estaba pensando en un gadget alojado en la web, en su caso el spriting no sería necesario, probablemente sería más fácil organizar cosas con archivos de imagen individuales. –

+0

En realidad, solo pensaba en las imágenes de vuelo/enfoque de sprites para mantener las carpetas de máscaras un poco más ordenadas. Al mismo tiempo, pensé, ¿por qué no sprite todos, imágenes de fondo, etc.? Simplemente pensé que sería más simple tener un solo archivo para cada grupo de imágenes en lugar de todas las imágenes individuales. De ahí mi pregunta con respecto a la memoria/rendimiento. –

1

Webbrowsers identifica los recursos almacenados en caché por su encabezado de respuesta ETag. Si está ausente o difiere entre las solicitudes, entonces la imagen puede descargarse y almacenarse en caché varias veces. Si usted (en realidad, el servidor web) proporciona un único y el mismo encabezado ETag para cada recurso único, cualquier navegador web decente es lo suficientemente inteligente como para mantener uno en caché y reutilizarlo siempre que su encabezado Expires lo permita.

Cualquier servidor web decente suministrará automáticamente el encabezado ETag para recursos estáticos, a menudo se autogenera basándose en una combinación del nombre de archivo local, la longitud del archivo y la última marca de tiempo modificada. Pero a menudo no agregan el encabezado Expires, por lo que debe agregarlo usted mismo. Después de juzgar su historial de publicaciones aquí en Stackoverflow, supongo que está familiarizado con Apache HTTPD como servidor web, por lo que le sugiero echar un vistazo a mod_expires documentation para aprender a configurarlo usted mismo de manera óptima.

En pocas palabras, sirva la imagen de sprite junto con un ETag y un encabezado futuro Expires y todo estará bien.