2010-11-10 19 views
5

Nel mio progetto corrente ho notato che IE utilizza molta memoria. Trascorso un po 'di tempo di indagine ho scoperto che le immagini non vengono rimosse dalla memoria, ma il mio sito utilizza le immagini in modo abbastanza intuitivo.Cache immagine IE8 o errore?

Infine ho creato un semplice test che carica dinamicamente le immagini e poi libera utilizzando jQuery

miei JS prova:

$(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(); 
} 

test 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> 

Mentre aggiungendo nuovi le immagini della memoria IE stanno aumentando. Ma dopo aver rimosso tutte le immagini caricate, la memoria non viene cancellata. Ad esempio, subito dopo il caricamento della pagina, il processo IE utilizza 20 MB, dopo l'aggiunta delle immagini utilizza 35 MB, dopo la cancellazione, 30 MB.

Ho usato lo strumento SIEVE per trovare una soluzione ma non ha rivelato perdite. IE memorizza la cache in qualche modo sulle immagini? C'è qualche problema in IE per gestire gli elementi dell'immagine creati dinamicamente?

Aggiornamento Nel livello di memoria di Firefox rimane costante, ma in IE è in aumento.

risposta

1

Questo sembra essere un problema con IE. Tutti i browser memorizzano il contenuto nella cache in modo che possa essere recuperato rapidamente quando è necessario nuovamente. Se è abbastanza intelligente, IE cancellerà la cache dopo un po 'o almeno alla chiusura.

Un'opzione consiste nell'utilizzare un metatag no cache, ma ciò rallenterebbe tutte le pagine in quanto le immagini dovranno essere ricaricate ogni volta che la pagina è.

Per quanto riguarda l'utilizzo effettivo, sembra abbastanza grande per un sito Web, ma i computer ora hanno almeno 2 GB di RAM (alcuni ancora felici con 1 GB), che è abbastanza abbondante. Non penso che ti imbatterai in problemi di memoria.

Come nota a margine, a volte FireFox ha preso grandi quantità di memoria dopo un lungo periodo di sviluppo web. Penso che i browser siano solo intelligenti.

Suppongo che i browser debbano svuotare più spesso le loro cache: se visiti un sacco di siti, diventerà piuttosto grande abbastanza rapidamente.

+0

Il limite massimo di memoria abbiamo assistito è 350 MB per il nostro sito. Per favore correggimi se sbaglio, ma questo è abbastanza. La maggior parte dei siti non ha raggiunto il limite di 100 MB. – lostaman

+0

@lostaman - Sì, questo è incredibilmente grande. Non sono sicuro di come risolvere il problema della memoria a meno che non abbiate usato il metatag della cache no per non memorizzare nulla. Sai qual è l'utilizzo della memoria per altri browser? Sarebbe utile: sarebbe ovvio se si trattasse di un problema di IE o di un problema di codice. – Bojangles

+0

Ho scoperto una cosa interessante. Se apro il sito Google e provo a utilizzare intensivamente la ricerca dell'istanza (nessun aggiornamento della pagina), il livello di memoria in IE sta aumentando. Sono riuscito a raggiungere 200 MB di livello semplicemente digitando diverse combinazioni. In Firefox tutto funziona. Può essere solo IE memorizza i contenuti in qualche modo se i componenti di ajax sono utilizzati intensivamente. – lostaman

1

Se stai facendo un sacco di richieste Ajax utilizzando jQuery poi le perdite di memoria può essere causato da questo:

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

c'è un bug in jQuery. Vedi il link sopra per i dettagli - la correzione è pianificata per la versione 1.4.5, ma puoi trovare alcuni esempi di codice nei commenti.

+0

Ho applicato questa correzione ma non ha modificato la situazione. Il limite di memoria continua ad aumentare. – lostaman

0

È possibile che IE non stia memorizzando le immagini nella cache.

From jQuery docs:

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

Questo esempio recupera la richiesta frammento di codice HTML e lo inserisce nella pagina .

Pagine recuperati con POST non sono mai cache, quindi la cache e ifModified opzioni in jQuery.ajaxSetup() non hanno alcun effetto su queste richieste.

si può fare un test prendendo la misura utilizzando questa soluzione: How to force a web browser NOT to cache images