утечка памяти при перезагрузке старшей диаграммы - PullRequest
0 голосов
/ 13 мая 2019

Возникла проблема с увеличением памяти при перезагрузке Highchart

Я пытаюсь запустить chart.destroy() явно при перезагрузке, дополнительная «анимация диаграммы: вспышка», но это не идеальный способ решения проблемы.

setInterval ( "initChart()", 1000*30 );`        

function initChart(){

    if ( typeof $ ( '#guage1' ).highcharts () !== 'undefined' )
    {
        $ ( '#guage1' ).highcharts ().destroy ();
    }

    var data = [{
        borderColor: "red",
        color: "#7cb5ec",
        innerRadius: "100%",
        radius: "100%",
        y: 60
    }];

    setHighcharts($('#guage1'), data);
    datas($('#guage1'),data);
}


function datas($container,data){

    var chart = $container.highcharts();

    if(typeof chart !== 'undefiend' || chart != null){

        var y = null;
        y = chart.series[0].data[0].y;

        for ( var i = y; i >= 0; i = i - (y / 80) )
        {
            chart.addSeries ( {
                data : [ {
                    y : i,
                    radius : '100%',
                    innerRadius : '100%',
                } ],
                stickyTracking : false,
                enableMouseTracking : false
            }, false )
        }
        chart.redraw ();

        Highcharts.each ( chart.series, function ( s )
        {
            s.update ( {
                borderColor : s.data[0].color
            }, false );
        } );
        chart.redraw ();
    }
    chart = null;
}


function setHighcharts($container, data1) {
console.log('');

    $container.highcharts ( {
        chart : {
            type : 'solidgauge',
            spacingBottom : 0,
            spacingTop : 0,
            spacingLeft : 0,
            spacingRight : 0,
            marginTop : 28,
            marginLeft : 28,
            marginRight : 28,
            marginBottom : 28,
            backgroundColor : 'rgba(255, 255, 255, 0.0)',
            style : {
                fontFamily : 'Nanum Gothic'
            },
            animation: false
        },

        title : {
            text : '',
            style : {
                display : 'none',
            }
        },

        pane : {
            startAngle : 0,
            endAngle : 360,
            background : [ { // Track for Move
                outerRadius : '112%',
                innerRadius : '88%',

                backgroundColor : 'rgba(17, 17, 26, 1)',
                borderWidth : 0
            } ]
        },

        yAxis : {
            min : 0,
            max : 100,
            lineWidth : 0,
            tickPositions : [],
            stops : [ [ 0, '#218ad8' ], [ 1, '#69ff05' ] // red
            ],
        },

        plotOptions : {
            solidgauge : {
                borderWidth : '15px',
                linecap : 'round',
                dataLabels : {
                    enabled : false
                },
                rounded: true
            }
        },
        series : [{
            data : data1,
        }]
    });
}

У меня есть страница с диаграммой 5-го калибра, и я перезагружаю диаграмму каждые 30 секунд, и объем памяти увеличивается.

Полагаю, созданный объект все еще находится в памяти.

первая загрузка - 159,6 МБ, после перезагрузки 7 - 171,8 МБ.

Итак, как мне освободить память при перезагрузке?

1 Ответ

0 голосов
/ 13 мая 2019

Уничтожение каждого графика и его инициализация каждые 30 секунд не очень хорошая идея.Вместо этого вы можете использовать методы для динамического обновления диаграммы, например: chart.update(), series.addPoint(), series.setData() и т. Д.

Демо:

Справочник по API:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...