2012-11-26 63 views
0

我真的不知道該做什麼了。我正在開發一個我的web應用程序中的高端圖表。數據正確加載,但只要我啓用圖表選項中的zoomType:'x',我開始在縮放時出現錯誤。Highstock |放大xAxis導致瀏覽器崩潰

我無法正確重現錯誤。但是,當我嘗試縮放xAxis並選擇幾乎所有在圖表中顯示的點時,它都會運行並放大。但是,當我選擇較小的一組點時,瀏覽器會停止,直到停用Chrome。在任務管理器中,我看到內存構建高達1GB的內存使用量。我在其他瀏覽器中測試過,並得到相同的錯誤。我不處理xAxis上的事件 - 只是放大和縮小。 highstockData.jsp只是一個包含許多時間戳的文件。

tldr:當我選擇很多點時,它會很好。 當我只選擇幾個點,瀏覽器崩潰和內存泄漏開始

更新:當我使rangeSelector並單擊以100萬次,它開始建立的內存了。但是當我等待更多分鐘(最多5分鐘)時,它會加載並且內存開始再次下降。

Update2:我試着調試一下。我等了將近5分鐘後,我在Chrome中對cpu使用情況進行了截圖。它說接近80%的cpu使用量被getnonlineartimeticks使用。

解決方案:只供他人蔘考。它已經解決了。問題是

xAxis : { 
    tickInterval : 4 
    }, 

一個小tickInterval強制x軸引起的一切煩惱......

這裏是一些代碼:

function initHighstock() { 
options = { 
    chart : { 
     zoomType : 'x', 
     renderTo : 'highstockContainer' 
    }, 
    plotOptions : { 
     series : { 
      lineWidth : 0, 
      marker : { 
       enabled : true, 
       radius : 3 
      }, 
     } 
    }, 
    navigator : { 
     enabled : false 
    }, 
    yAxis : { 
     min : 0, 
     max : 24, 
     tickInterval : 4 
    }, 
    xAxis : { 
     tickInterval : 4 
    }, 
    tooltip : { 
    shared : false, 
     formatter : function() { 
      return '<b>' + Highcharts.dateFormat('%A, %b %e, %Y', this.x) + '</b>' + '<br/>' + 'Time of day: ' 
        + this.y; 
     } 
    }, 
    rangeSelector : { 
     enabled : true 
    }, 
    title : { 
     text : 'Diary' 
    }, 
    series : [] 
}; 

$.get('highstockData.jsp', function(data) { 
    // Split the lines 
    var lines = data.split(';'); 
    var series = { 
     data : [] 
    }; 

    for (var k = 0; k < lines.length; k++) { 
     if (lines[k].length > 0) { 
      var line = lines[k]; 
      var items = line.split(','); 

      var myDate = new Date(Math.round(items[0] * 1000)); 
      series.data.push([ parseInt(Math.round(myDate.getTime())),  parseInt(Math.round(myDate.getHours())) ]); 
      myDate = null; 
     } 
    } 
    series.data.sort(function(x, y) { 
     return x[0] - y[0]; 
    }); 

    options.series.push(series); 
    // Create the chart 
    var chart1 = new Highcharts.StockChart(options); 
    chart1.redraw(); 

}); 
}; 
+0

您可以在小提琴上生成示例嗎? –

+0

我無法在jsfiddle上重現錯誤。但我可以把它放在我的網絡服務器上。會有幫助嗎? – user1651804

回答

0

解決方法:只爲他人的信息。它已經解決了。問題是:

xAxis : { 
tickInterval : 4 
}, 

強制xAxis在一個小tickInterval導致所有麻煩。

0

請使用最新版本的Highchart。 一般這種問題是由於緊湊(縮小)的js文件而產生的。使用highstock.src.js文件而不是highstock.js