Javascript、Highcharts:避免并行函数调用

Javascript、Highcharts:避免并行函数调用,javascript,jquery,highcharts,Javascript,Jquery,Highcharts,我正在开发一个仪表板,其中有5个按钮,单击每个按钮,相应的图表将显示在同一个分区中 我的代码结构如下: $(document).ready(function(){ $("button").click(function(){ function requestData() { $.ajax({ url : ...., success : function(){

我正在开发一个仪表板,其中有5个按钮,单击每个按钮,相应的图表将显示在同一个分区中

我的代码结构如下:

$(document).ready(function(){
   $("button").click(function(){
       function requestData() {
          $.ajax({
             url : ....,
             success : function(){
                          .....
                          //Real Time Plotting of Data
                          chart.series[0].addPoint(eval(point), true, shift);
                          setTimeout(requestData, 2000);
                       }
            });
         }
          chart = new Highcharts.Chart({
                  chart: {
                           renderTo: 'chart',
                           defaultSeriesType: 'spline'
                          },
                          ....                              
                          ....
           });
    });

});
问题是:每次单击按钮,就会启动一个并行requestData,同时运行多个并行线程。这会导致随机添加点和内存消耗的增加

此外,在控制台中使用Highcharts.Chart进行检查时,每次单击后,未定义的对象都会累积起来


如何重新构造代码以获得最佳性能?

请参阅下面的代码,您的high chart工具可能是这样的

$(function () {
$(document).ready(function () {

    $('#container').highcharts({
        chart: {
            type: 'spline',
            animation: Highcharts.svg, // don't animate in old IE
            marginRight: 10,
            events: {
                load: function () {

                    // set up the updating of the chart each second
                    var series = this.series[0];
                    setInterval(function () {
                        var x = (new Date()).getTime(), // current time
                            y = Math.random();
                        series.addPoint([x, y], true, true);
                    }, 1000);
                }
            }
        },
        title: {
            text: 'Live random data'
        },
        xAxis: {
            type: 'datetime',
            tickPixelInterval: 150
        },
        yAxis: {
            title: {
                text: 'Value'
            },
            plotLines: [{
                value: 0,
                width: 1,
                color: '#808080'
            }]
        },
        tooltip: {
            formatter: function () {
                return '<b>' + this.series.name + '</b><br/>' +
                    Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' +
                    Highcharts.numberFormat(this.y, 2);
            }
        },
        legend: {
            enabled: false
        },
        exporting: {
            enabled: false
        },
        series: [{
            name: 'Random data',
            data: (function () {
                // generate an array of random data
                var data = [],
                    time = (new Date()).getTime(),
                    i;

                for (i = -19; i <= 0; i += 1) {
                    data.push({
                        x: time + i * 1000,
                        y: Math.random()
                    });
                }
                return data;
            }())
        }]
    });
});
})

基本上,您不需要安排实时打印,high chart有此更新选项 现场小提琴

将下面的数据选项替换为ajax调用

 data: (function () {
            // generate an array of random data
            var data = [],
                time = (new Date()).getTime(),
                i;

            for (i = -19; i <= 0; i += 1) {
                data.push({
                    x: time + i * 1000,
                    y: Math.random()
                });
            }
            return data;
        }

ajax calll中requestData成功后,您再次调用requestData,或者我不理解您的代码?此代码每2秒添加一个点,类似于实时绘图。因此,在添加一个点之后,我将调用ajax,以便获取新的值。服务器db/web服务器/网络或客户端浏览器的性能问题在哪里?