2010-11-10 11 views
5

En mi proyecto actual, he notado que IE usa mucha memoria. Pasé algún tiempo investigando y descubrí que las imágenes no se borran de la memoria, pero mi sitio usa imágenes bastante detenidamente.Caché de imagen IE8 o error?

Finalmente he creado una prueba sencilla que carga dinámicamente imágenes y luego lo borra usando jQuery

mi prueba JS:

$(document).ready(function() { 
    $('#appendImages').click(append); 
    $('#removeImages').click(remove); 
}); 

function append() { 
    $.post("http://localhost/TestService/GetImages", { key: $('#key').val()}, function (data) { 
     $.each(data.Data.items, function (i, v) { 
      $('#imagesContainer').append('<img src="' + v.imageUrl + '" />'); 
     }); ; 
    }); 
} 

function remove() { 
    $('#imagesContainer').empty(); 
} 

prueba html:

<input id="key" type="text" value="jeans" > 
<div id="reset">Reset</div> 
<div id="repeatableReset">Repeatable Reset</div> 
<div id="stop">Stop</div> 
<br /> 
<br /> 
<br /> 
<br /> 
<div id="appendImages">append</div> 
<div id="removeImages">remove</div> 
<div id="imagesContainer"></div> 
<html> 

</html> 

Mientras añadiendo nueva imágenes que la memoria IE está aumentando. Pero después de eliminar todas las imágenes cargadas, la memoria no se borra. Por ejemplo, justo después de cargar la página, el proceso de IE usa 20MB, después de agregar imágenes usa 35MB, después de borrar - 30MB.

Utilicé la herramienta sIEve para encontrar cualquier producto, pero no detectó ninguna fuga. ¿IE cache de alguna manera las imágenes? ¿Hay algún problema en IE para manejar elementos de imagen creados dinámicamente?

Actualización En el nivel de memoria de Firefox se mantiene constante, pero en IE está aumentando.

Respuesta

1

Esto parece ser un problema con IE. Todos los navegadores almacenarán en caché el contenido para que se pueda recuperar rápidamente cuando sea necesario nuevamente. Si es lo suficientemente inteligente, IE borrará la memoria caché después de un tiempo, o al menos cerca.

Una opción es utilizar una metaetiqueta sin caché, pero eso ralentizará todas sus páginas, ya que las imágenes tendrán que volver a cargarse cada vez que se encuentre en la página.

En cuanto al uso real, parece bastante grande para un sitio web, pero las computadoras ahora tienen al menos 2 GB de RAM (algunas aún contento con 1 GB), que es suficiente. No creo que te encuentres con problemas de memoria.

Como nota al margen, a veces FireFox ha tomado grandes trozos de memoria después de un largo período de desarrollo web. Creo que solo los navegadores son inteligentes.

Creo que los navegadores deberían borrar sus cachés con más frecuencia. Si visita muchos sitios, se volverá bastante grande con bastante rapidez.

+0

El límite máximo de memoria es de 350 MB fuimos testigos de nuestro sitio. Por favor, corrígeme si estoy equivocado, pero esto es bastante. La mayoría de los sitios no alcanzó el límite de 100 MB. – lostaman

+0

@lostaman - Sí, esto es increíblemente grande. Realmente no estoy seguro de cómo solucionaría el problema de memoria a menos que haya utilizado la metaetiqueta "no caché" para no almacenar nada en la memoria caché. ¿Sabes cuál es el uso de la memoria para otros navegadores? Eso sería útil, sería obvio si era un problema de IE o un problema de código. – Bojangles

+0

Descubrí algo interesante. Si abro el sitio de Google y trato de utilizar intensamente la búsqueda de instancias (sin actualización de página), el nivel de memoria en IE está aumentando. Logré alcanzar el nivel de 200MB simplemente escribiendo diferentes combinaciones. En Firefox todo funciona. Puede ser que solo IE almacene en caché los contenidos de alguna manera si los componentes ajax se usan de manera intensiva. – lostaman

1

Si usted está haciendo una gran cantidad de peticiones Ajax con jQuery luego pérdidas de memoria pueden ser causados ​​por esto:

http://bugs.jquery.com/ticket/6242

hay un error en jQuery. Consulte el enlace de arriba para conocer los detalles: el arreglo está planificado para la versión 1.4.5, pero puede encontrar algunos ejemplos de código en los comentarios.

+0

He aplicado esta solución pero no ha cambiado la situación. El límite de memoria continúa aumentando. – lostaman

0

Es posible que IE no esté almacenando en caché las imágenes.

From jQuery docs:

$.post('ajax/test.html', 
    function(data) { 
     $('.result').html(data); 
}); 

En este ejemplo se obtiene el solicitado fragmento HTML y lo inserta en la página .

Páginas inverosímiles con la POST nunca son caché, por lo que la memoria caché y ifModified opciones en jQuery.ajaxSetup() no tienen ningún efecto sobre estas solicitudes.

Usted puede hacer una prueba mediante la adopción de la medida usando esta solución: How to force a web browser NOT to cache images

Cuestiones relacionadas