2012-06-05 6 views
0

J'ai le script suivant (j'utilise aussi raphaeljs) qui dessine un cercle, attend 1 seconde, dessine un cercle, etc (vous pouvez copier le coller - est fonctionnel, seulement besoin d'inclure raphael de raphaeljs.com):firefox fuite de mémoire

<div id="holder"> 

</div> 
<script src="raphael.js" type="text/javascript"></script> 
<script> 
    var paper = Raphael(10, 50, 320, 200); 
    var rad = Math.PI/180; 
    var finAngle = 0; 
    function sector(cx, cy, r, startAngle, endAngle, params) { 
      var x1 = cx + r * Math.cos(-startAngle * rad), 
      x2 = cx + r * Math.cos(-endAngle * rad), 
      y1 = cy + r * Math.sin(-startAngle * rad), 
      y2 = cy + r * Math.sin(-endAngle * rad); 
     return ["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(endAngle - startAngle > 180), 0, x2, y2]; 
    } 

    var path = sector(100,100,50,0,180); 
    var arc = paper.path(path); 

    function draw() 
    { 
     path = sector(100,100,50,0,finAngle); 
     arc.attr({"path": path}); 

     finAngle += 1; 
     /* 
     if (finAngle == 360) 
      finAngle = 359; 
     */ 
     if (finAngle > 360) 
     {   
      clearInterval(interval); 
      setTimeout("setNewInterval();", 1000); 
      finAngle = 1; 
     } 

     return; 
    } 

    function setNewInterval() 
    { 
     interval = setInterval("draw();", 3); 
    } 
    var interval = setInterval("draw();", 3); 

</script> 

Le problème est qu'il semble générer une fuite de mémoire sur Firefox (je laisse tourner pendant 10 min et comme Firfox obtenu à 700 Mo de RAM (chrome est resté à 25MB)). Chrome n'a aucun problème avec cela.

Des idées pour résoudre ce problème?

+0

le signaler bug Firefox – lanzz

+0

fait ... mais cela ne résout pas vraiment mon problème :). Je cherche à modifier le script mais ... je ne sais pas vraiment comment puisque je ne vois pas de problèmes là-bas. – zozo

+1

Quelle version de Firefox? Avez-vous essayé avec Firefox Nightly? Avez-vous le même problème? Vous pouvez également utiliser 'about: memory' pour mieux tracer l'endroit où se produit cette incrémentation de mémoire, et essayer de forcer le GC et de minimiser l'utilisation de la mémoire. Même si ce n'est probablement pas pertinent, je vous suggère de passer la fonction ref à 'setInterval' /' setTimeout', pas une chaîne, par exemple: 'setInterval (draw, 3)'. Prenez également en compte le fait qu'il y a une chance que ce soit un bug de navigateur ou un bug de la bibliothèque, donc votre code ne peut pas faire grand-chose. – ZER0

Répondre

0

Cela ressemble à une sorte de problème heuristique GC impair. J'ai déposé https://bugzilla.mozilla.org/show_bug.cgi?id=761893

En attendant, le meilleur que vous pouvez faire est de trouver ce qui l'attribution de ces dizaines de méga-octets de chaînes par seconde et ne pas le faire ...