jqplot學習筆記

來源:互聯網
上載者:User

jqplot動態填充資料,網上以下三種方法:

大家在使用jqPlot動態更新圖表時,也許會碰到過在IE中出現記憶體溢出的問題,下面我們來看看集中動態更新jqPlot圖表的方式:

方式一:通過重建圖表實現動態顯示。

Javascript代碼  
  1. var series = [{'test'}];  

  2. var axes = {  

  3.    xaxis : {  

  4.        renderer : $.jqplot.CategoryAxisRenderer,  

  5.        ticks : []  

  6.    },  

  7.    yaxis : {  

  8.        min : 0,  

  9.        max : 10,  

  10.        tickInterval : 2  

  11.    }  

  12. };  

  13. var plotConfig = createBarChartOptions(axes, series);  

  14. resizeGlobalMonitorChartContainer(containerId);  

  15. var plot = $.jqplot(g_channelDivId, chartData, plotConfig);  



實際上我們通過重複的建立圖表,確實可以實現動態更新,不過在IE下,我們會發現記憶體增長很厲害,起初,通過嘗試在重新建立圖表時,提前銷毀舊的圖表來釋放記憶體:

Javascript代碼  
  1. /**

  2. * 將plot圖表從容器中銷毀。

  3. *  

  4. * @param containerId

  5. *            容器ID。

  6. * @param plot

  7. *            在容器中的圖表。

  8. */

  9. function releasePlotChart(containerId, plot) {  

  10. if (plot) {  

  11.        plot.destroy();  

  12. var elementId = '#' + containerId;  

  13.        $(elementId).unbind(); // for iexplorer

  14.        $(elementId).empty();  

  15.        plot = null;  

  16.    }  

  17. }  



當我們觀察記憶體變化的時候,會發現銷毀圖表時記憶體減少了,但是重建之後,記憶體會比原來多出一些,一定時間以後,記憶體就會不斷的增加,最後導致記憶體溢出。

方式二:通過動態資料載入,重繪實現。

Javascript代碼  
  1. /**

  2. * 重繪plot圖表。

  3. *  

  4. * @param containerId

  5. *            容器ID。

  6. * @param chartData

  7. *            圖表資料。

  8. * @param plotConfig

  9. *            圖表配置資訊。

  10. * @returns 返回重繪後的圖表對象。

  11. */

  12. function replotChart(plot, chartData) {  

  13.    setChartDataToPlot(plot, chartData);  

  14.    plot.replot({  

  15.        resetAxes : true

  16.    });  

  17. return plot;  

  18. }  

  19. /**

  20. * 將最新的資料設定到plot圖表中。

  21. *  

  22. * @param plot

  23. * @param chartData

  24. */

  25. function setChartDataToPlot(plot, chartData) {  

  26. for ( var i = 0; i < plot.series.length; i++) {  

  27. for ( var j = 0; j < plot.series[i].data.length; j++) {  

  28. try {  

  29.                plot.series[i].data[j][1] = chartData[i][j];  

  30.            } catch (e) {  

  31.            }  

  32.        }  

  33.    }  

  34. }  



通過運用這種方式,再次觀察記憶體變化,會發現記憶體溢出問題已經不存在了。

從中我們發現,只要重建Plot圖表,記憶體就會出現遞增的現象,因此,當我們需要切換圖表的時候,最好將原來的圖表隱藏起來,當再次需要顯示的時候,再恢複顯示,從而避免重複建立圖表,從而導致記憶體溢出。


目前我使用的是第三種方法,不知道在之後使用過程中會不會出現一些bug,有待觀察。


http://stackoverflow.com/questions/5178197/how-to-refresh-jqplot-bar-chart-without-redrawing-the-chart

這個網站中使用的是第二種方法,可以做為參考,有些情況圖表不僅僅需要重新讀資料,還需要重新畫,估計就得用這種方法了?還沒有仔細研究。有時間會做實驗。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.