2013-07-17 55 views
0

我試圖在畫布上繪製一些漸變線,使用jCanvas插件和jQuery,但是我的代碼導致Firefox中的內存泄漏(保留的RAM增加到無窮大)。 Internet Explorer處理內存使用情況相當不錯,但整個事情非常緩慢。只有谷歌瀏覽器顯示我的畫布沒有滯後。 你能告訴我我做錯了什麼?的代碼JavaScript:畫布上的內存泄漏(不在Chrome中)

零件:

  • 聲明:

    var i, i1, i2, p; 
    var r=[], g=[], b=[], a=[]; 
    var gradient=[]; 
    var w=$("body").width(); 
    var w2=Math.floor(w/2), w3=w2-1; 
    var h=$("body").height(); 
    
  • 附圖中:

    function draw() { 
        $('#bg').clearCanvas(); 
        for (i=0; i<w2; i++) { 
         $('#bg').drawLine({ 
          strokeStyle: gradient[i], 
          strokeWidth: 2, 
          x1: i*2, y1: 0, 
          x2: i*2, y2: 700, 
         }); 
        } 
    } 
    
  • 重新計算的線顏色值

    function mixer() { 
    for (i=0; i<w2; i++) { 
        p = Math.random(); 
        if (p<0.997) { 
         i1 = (i>1)?i-1:w3; 
         i2 = (i<w3)?i+1:0; 
         r[i] = Math.floor((r[i1] + r[i2])/2); 
         g[i] = Math.floor((g[i1] + g[i2])/2); 
         b[i] = Math.floor((b[i1] + b[i2])/2); 
        } 
        else { 
         r[i] = Math.floor(Math.random()*180); 
         g[i] = Math.floor(Math.random()*180); 
         b[i] = Math.floor(Math.random()*180); 
        } 
        delete gradient[i]; 
        gradient[i] = $("#bg").createGradient({ 
         x1: 0, y1: 0, 
         x2: 1, y2: 699, 
         c1: '#000', 
         c2: "rgb("+r[i]+","+g[i]+","+b[i]+")", 
         c3: '#000' 
        }); 
    } 
    draw(); 
    } 
    window.setInterval(mixer, 60); 
    
+0

我要說的,而不是使用間隔,使用的被召回戰平後 –

回答

0

測試,如果是這樣的好:

function mixer() { 
    for (i = 0; i < w2; i++) { 
     p = Math.random(); 
     if (p < 0.997) { 
      i1 = (i > 1) ? i - 1 : w3; 
      i2 = (i < w3) ? i + 1 : 0; 
      r[i] = Math.floor((r[i1] + r[i2])/2); 
      g[i] = Math.floor((g[i1] + g[i2])/2); 
      b[i] = Math.floor((b[i1] + b[i2])/2); 
     } else { 
      r[i] = Math.floor(Math.random() * 180); 
      g[i] = Math.floor(Math.random() * 180); 
      b[i] = Math.floor(Math.random() * 180); 
     } 
     delete gradient[i]; 
     gradient[i] = $("#bg").createGradient({ 
      x1: 0, 
      y1: 0, 
      x2: 1, 
      y2: 699, 
      c1: '#000', 
      c2: "rgb(" + r[i] + "," + g[i] + "," + b[i] + ")", 
      c3: '#000' 
     }); 
    } 
    draw(); 
    setTimeout(mixer, 60); 
} 
mixer(); 
+0

一點也不超時 - 現在內存的使用在Firefox振盪和從2,5到3,5GB。 (並且可能還在增加) – TeoTN