3

hover 属性を持つ Raphael ライブラリの円グラフを使用すると、重大なメモリ リークが発生します。ホバー属性を含むコードを削除すると、うまく機能し、それをメモリフットプリントに追加すると、メモリフットプリントが着実に増加し、円グラフにカーソルを合わせるとメモリフットプリントがさらに増加し​​ます。他のほとんどの例とは異なり、window.setInterval を使用して常にページを更新しています (これが役立つ場合)。この問題を修正する方法と助けを求める方法について途方に暮れています。

以下は、私がやっていることの基本です... Raphael Web サイトで動的な pieChart をほとんど使用し、それにインターバル タイマーを追加しています。ただし、メモリの問題なしでホバー効果を利用する方法がわかりません???:

 window.onload = setInterval(drawThePie, 10000);
function drawThePie() {
    var mainCont = parent.frames["main"].document;
    mainCont.getElementById("holder").innerHTML = "Getting data..";

    //..Setting values for pieChart and legend into arrays here

    //..Looping through color array and setting values for colorlist below

            var r = Raphael("holder");
    var aCircle = r.aCircle(85,85,78).attr({fill: "black"});

            pie = r.piechart(85,85,75,data, {"legend": legend, "legendpos": "east", colors: colorlist });
    if(dataNotZero > 0) { mainCont.getElementById("holder").innerHTML = "";}

            pie.hover(function () {
                this.sector.stop();
                this.sector.scale(1.1, 1.1, this.cx, this.cy);

                if (this.label) {
                    this.label[0].stop();
                    this.label[0].attr({ r: 7.5 });
                    this.label[1].attr({ "font-weight": 800 });
                }
            }, function () {
                this.sector.animate({ transform: 's1 1 ' + this.cx + ' ' + this.cy }, 500, "bounce");

                if (this.label) {
                    this.label[0].animate({ r: 5 }, 500, "bounce");
                    this.label[1].attr({ "font-weight": 400 });
                }
            });
        };
4

1 に答える 1

1

すべてのコードを見ることはできません。だから私は推測することができます...

この部分が磨耗していたのかもしれません

this.sector.scale  

コードのこの部分は、DOM 参照を持つ何らかの値を取得している可能性があります。関数が終了したとき、値はまだ DOM 参照を解放していません。

于 2012-08-20T03:02:40.583 に答える