2014-05-11 60 views
0

我有一個使用FlotJS渲染圖表的EmberJs應用程序。在一個特定的圖表中,我們在圖表中繪製了50多個條形圖,網頁的內存大幅增加,即使移動到其他頁面後,網頁的內存也不會減少。當該圖表呈現5倍以上的網頁崩潰時。 Chrome的任務管理器顯示以下詳細信息,網頁內存急劇增加

之前繪製的圖表,
內存 - 259MB
GPU內存 - 63.7MB
JavaScript中的內存 - 22,982K(12,755K住)

繪製圖表後,
內存 - 396MB
GPU內存 - 58.2MB
JavaScript中的內存 - 46,233K(29,059K住)

當繪圖功能的FlotJS被評論,內存利用率增加1MB增加1MB。

可能的原因是什麼? Chrome任務管理器顯示的內存值包含什麼? FlotJS是否引入了任何內存泄漏?

+1

如何確保只生成50多個小節但不能重複生成? – jhyap

+0

您使用的是哪種版本的Flot? – DNS

+0

@DNS版本0.8.2 –

回答

0

看着你的代碼,我可以再現內存使用情況。我不得不走極端,雖然,基本上做到這一點:

while(true) 
{ 
    $('.flot').empty(); 
    $.plot(".flot", [JSON.parse(data)]); 
} 

這導致成千上萬的重畫,並毀壞了內存。

但是,清空div並重新啓動圖表不是正確的重繪方式。您should be using的組合setData,setupGriddraw。這樣做:

var splot = null; 
while(true) 
{ 
    if (splot == null) 
    { 
     splot = $.plot(".flot", [JSON.parse(data)]); 
    } 
    else 
    { 
     splot.setData([JSON.parse(data)]); 
     splot.draw(); 
    }  
} 

我的內存使用率是平坦的。

此外,您的示例代碼不顯示您如何使用emberJS。我對它並不是很熟悉,但我會仔細檢查它是否具有數據綁定的榮耀,它不會強制圖表重複過頻。