2010-11-10 5 views
5

Sur mon projet actuel, j'ai remarqué que IE utilise beaucoup de mémoire. Passé un certain temps d'enquête, j'ai découvert que les images ne sont pas supprimées de la mémoire, mais mon site utilise des images assez intensément.Mise en cache ou erreur d'image IE8?

Enfin, j'ai créé un test simple qui charge dynamiquement des images et efface ensuite à l'aide de jQuery

Mes js test:

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

html Test:

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

Alors que annexant nouveau images la mémoire IE est en augmentation. Mais après avoir supprimé toutes les images chargées, la mémoire n'est pas effacée. Par exemple, juste après le chargement de la page IE processus utilise 20 Mo, après l'ajout d'images, il utilise 35 Mo, après avoir effacé - 30 Mo.

J'ai utilisé l'outil sIEve pour trouver n'importe quel leand mais il a décelé aucune fuite. Est-ce que cache IE en quelque sorte les images? Y a-t-il des problèmes dans IE pour gérer les éléments d'image créés dynamiquement?

Mise à jour Dans Firefox, le niveau de la mémoire reste constant, mais dans IE, il augmente.

Répondre

1

Cela semble être un problème avec IE. Tous les navigateurs vont mettre en cache le contenu afin qu'il puisse être récupéré rapidement au besoin. Si c'est assez intelligent, IE va effacer le cache après un certain temps, ou au moins au moins.

Une option consiste à utiliser une méta-balise no cache, mais cela ralentirait toutes vos pages car les images devront être rechargées à chaque fois que la page est. En ce qui concerne l'utilisation réelle, il semble assez grand pour un site Web, mais les ordinateurs ont maintenant au moins 2 Go de RAM (certains sont encore heureux avec 1 Go), ce qui est suffisant. Je ne pense pas que vous rencontrerez des problèmes de mémoire.

En note secondaire, j'ai parfois FireFox a pris de gros morceaux de mémoire après une longue période de développement web. Je pense que ce sont juste les navigateurs qui sont intelligents. Je pense que les navigateurs devraient effacer leurs caches plus souvent - si vous visitez beaucoup de sites, ils deviendront rapidement assez volumineux.

+0

La limite maximale de la mémoire, nous avons assisté est 350MB pour notre site. Corrigez-moi si je me trompe, mais c'est beaucoup. La plupart des sites n'ont pas atteint la limite de 100 Mo. – lostaman

+0

@lostaman - Oui, c'est incroyablement grand. Je ne sais vraiment pas comment résoudre le problème de mémoire à moins que vous n'utilisiez la balise META no cache pour ne rien cacher du tout. Savez-vous quelle est l'utilisation de la mémoire pour les autres navigateurs? Ce serait pratique - il serait évident s'il s'agissait d'un problème d'IE ou d'un problème de code. – Bojangles

+0

Trouvé quelque chose d'intéressant. Si j'ouvre le site Google et que j'essaie d'utiliser intensivement la recherche d'instance (pas d'actualisation de la page), le niveau de mémoire dans IE augmente. J'ai réussi à atteindre un niveau de 200 Mo en tapant différentes combinaisons. Dans Firefox tout fonctionne trouver. Il se peut que ce soit juste le contenu des caches IE si les composants ajax sont intensivement utilisés. – lostaman

1

Si vous faites beaucoup de demandes ajax en utilisant jQuery alors les fuites de mémoire peut être causée par ceci:

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

Il y a un bogue dans jQuery. Voir le lien ci-dessus pour les détails - correctif prévu pour la version 1.4.5, mais vous pouvez trouver des exemples de code dans les commentaires.

+0

J'ai appliqué ce correctif mais cela n'a pas changé la situation. La limite de mémoire continue d'augmenter. – lostaman

0

Il est possible que IE ne cache pas les images du tout.

From jQuery docs:

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

Cet exemple récupère la demande HTML extrait et il insère sur la page .

Les pages récupérées avec POST ne sont jamais mis en cache , de sorte que le cache et ifModified options jQuery.ajaxSetup() n'a pas d'effet sur ces demandes.

Vous pouvez faire un test en prenant la mesure en utilisant cette solution: How to force a web browser NOT to cache images