0

J'essaie de résoudre un problème avec une fuite de mémoire dans IE avec Javascript. Basicaaly J'utilise javascript pour ajouter des icônes au-dessus d'une image puis j'ai besoin de pour actualiser périodiquement les icônes en les supprimant et en les rajoutant. Lorsque je lance l'application par goutte-à-goutte (IE6 indicateur d'utilisation de la mémoire), lorsque je supprime les images avant de les redessiner, la mémoire n'est jamais récupérée Quelqu'un a des idées sur la façon de forcer à récupérer cette mémoire?javascript fuite de mémoire

Code

ci-dessous - le periodicalExecuter est un mécanisme de synchronisation du prototype:

<pre> 
<head> 
    <script src="Prototype/prototype-1.6.0.3.js" type="text/javascript"></script> 
    <style> 
     #container { 
      position:absolute; 
      left:20px; 
      top: 20px; 
      height:700px; 
      width:700px; 
      background-color: pink; 
     } 
    </style> 
    <script> 
     function addIcons() { 
      var ctr = document.getElementById("container"); 
      var x = 0; 
      var y = 0;    
      var x1 = 0; 
      var y1 = 0; 
      var cnt = 0; 
      var imgStr = "";  
      var img; 
      var div1;  
      new PeriodicalExecuter(function(pex) { 
       y1 = cnt % 13; 
       if (y1 == 0) { 
        x1++; 
       } 
       x = (x1 + 1) * 21; 
       y = (y1 + 1) * 21;  
       div1 = document.createElement('div');     
       div1.id = 'img_' + (x1 - 1).toString() + y1.toString(); 
       div1.style.position = "absolute"; 
       div1.style.left = x; 
       div1.style.top = y; 
       img = document.createElement ('img'); 
       img.src = 'traffic_icons/traffic-05.gif';     
       div1.appendChild(img); 
       ctr.appendChild(div1); 
       cnt++; 
       if (cnt == 169) { 
        pex.stop(); 
        deleteIcons(); 
       } 
      }, 0.1); 
     } 


     function deleteIcons() { 
      var ctr = document.getElementById("container"); 

      var node = ""; 
      var id = "";   
      for (var k = 0; k < 13; k++) { 
       for (var i = 0; i < 13; i++) {            
        id = 'img_' + k.toString() + i.toString(); 
        node = document.getElementById(id);   
        ctr.removeChild(node);      
       } 
      } 
      addIcons(); 
     } 
    </script> 
</head> 

<body> 
<div id="container"></div> 
<button onclick="addIcons();" style="position:absolute;left:780px;top:20px">Load Images</button> 
<button onclick="deleteIcons();" style="position:absolute;left:780px;top:100px">Delete Images</button> 
</body> 
</html> 
</pre> 

Répondre

1

Vous pouvez essayer d'actualiser les images en modifiant l'URL d'une image dynamique, comme ceci:

 
var imageRefreshCounter = 0; 

function refreshIcons() { 
      var ctr = document.getElementById("container"); 

      var node = ""; 
      var id = "";   
      for (var k = 0; k < 13; k++) { 
       for (var i = 0; i < 13; i++) {            
        id = 'img_' + k.toString() + i.toString(); 
        node = document.getElementById(id);   
        node.src = node.src + "?" + imageRefreshCounter++;     
       } 
      } 
      addIcons(); 
     } 
0

Vous devez passer à 1.6.1, qui corrige certaines des fuites dans Prototype.js lui-même.