J'ai un javascript (utilisé avec google maps api) que je suis en train de tester sur IE et Chrome et j'ai remarqué des symptômes de fuites de mémoire dans IE seulement: quand je rafraîchis la page, la quantité de mémoire utilisée en croissance (rapide), mais dans Chrome, il reste constant. Sans poster tout le code (car c'est plutôt long), puis-je avoir des suggestions sur ce qu'il faut faire attention? Qu'est-ce qui pourrait causer la croissance continue de la mémoire dans IE dans les actualisations de la page? Comme je l'ai dit, je sais que c'est dur sans code, mais j'aimerais voir si un conseil générique fonctionne en premier. Merci.javascript fuite de mémoire
Mise à jour: merci pour les réponses jusqu'à présent. Comme une vérification de santé mentale, j'ai couru le goi google maps "Hello World" code from google pour voir ce qui se passerait dans IE (le code est montré ci-dessous). Lorsque vous exécutez ce code dans IE, lorsque je continue à actualiser la page encore et encore, la mémoire ne cesse de croître et de croître. Est-ce une fuite de mémoire? Cela ne marche pas comme la fonctionnalité semble destiné ...
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
function initialize() {
var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
zoom: 8,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</html>
Mise à jour 2: Ainsi est-il pas moyen d'obtenir ce google Bonjour Mappemonde Code api pour fonctionner sans fuite de mémoire dans IE? J'ai remarqué que si je cours la même expérience sur maps.google.com il ne semble pas y avoir de fuite ... Ce serait génial si quelqu'un pouvait m'aider à modifier le code de bonjour pour qu'il ne fuie pas dans IE; De cette façon, je peux en tirer parti (cela ne me dérange pas d'utiliser JQuery si cela peut vous aider, mais je l'ai essayé sur le code Hello World et ça fuyait toujours dans IE). Merci encore
IE 6 avait un problème de fuite très spécifique où, si vous ne l'avez pas Null tous les gestionnaires d'événements (onclick, onmousever, onload) sur Éléments HTML que vous avez créés ng et détruisant dynamiquement, ces références ne seraient jamais récupérées. Cela a été corrigé dans les versions ultérieures. Donc, si vous rencontrez cela dans IE6, c'est probablement votre problème (bien que le code de Google devrait être au-dessus de ce problème). Rappelez-vous que le navigateur exécutera son garbage collector lorsqu'il en a envie, et presque jamais quand vous l'attendez. L'utilisation de la mémoire diminue-t-elle si vous attendez? – Andrew
J'utilise en fait IE 7, et la mémoire ne tombe pas en attente ... comment est-ce que je "annulerais tous les gestionnaires d'événements" quand je l'attacherais simplement à
? – hhjSi vous utilisez IE 7, ce problème ne devrait pas vous affecter. Le problème était que si vous aviez des éléments liés à des événements (si la carte avait une fonctionnalité de glisser-déposer, alors cela est le cas), vous deviez parcourir tous les éléments ayant des gestionnaires d'événements et dire ' document.getElementById ('mydiv'). onclick = null; 'etc. Mais vous avez complètement raison. Dans le cas de votre code ci-dessus, il n'y a rien de mal que vous faites que je puisse voir. Ce doit être un problème avec le code Google - la pire réponse que je puisse donner. – Andrew