2012-03-22 61 views
0

目前,我們正在對渲染的瀏覽器窗口50-100畫布。 IE瀏覽器和Chrome瀏覽器崩潰。 經過進一步調查,看起來記憶正在穩步上升。導致瀏覽器崩潰。誠圖表內存泄漏,導致瀏覽器崩潰

我們正在構建一個解決方案來打印圖表爲了實現這一目標,

  1. 我們是在一個簡單的頁面顯示所有圖表(IFRAME)圖表是不是用戶
  2. 可見使用圖表ID來獲得圖像數據。
  3. 因爲圖表是不可見的,我們可以「摧毀」或一旦呈現從內存中刪除它們。
  4. 但是「毀滅」不減少圖表內存佔用
  5. 嘗試設置對象爲null。這並沒有工作,要麼

附加片段供大家參考,

var runner = 0 
zingchart.complete = function (dataObj) { 
    for (i = 0; i < ZingChartCollection.length; i++) { 
     if (dataObj["id"] == ZingChartCollection[i].ChartId) { 
      var data = zingchart.exec(dataObj["id"], "getimagedata", '{"filetype": "png"}'); 
      zingchart.exec(dataObj["id"], 'destroy'); 
      zingchart.exec(); 
      if (runner < 200) { 
       document.getElementById("displayCount").value = runner; 
       render(); 
      } 
      else { 
       //zingchart = null; 
      } 
      runner++; 
     } 
    } 
} 

任何建議將是巨大的。

回答

0

下面是關於從ZinChart開發團隊問題的說明:


在這裏的問題是,渲染() - >完整的事件 - >圖像生成 - > destroy()方法是一個閉環。

的方式,LIB ZingChart作品,爲了儘快火完整,代碼是結合上下文菜單事件後完全被解僱了。 因此,由於摧毀被立即調用,上下文菜單事件被公開地排除,並且開始添加50-100個圖表,導致內存泄漏。

這將改變&以上下文菜單的設置後然而,火完整的事件,當前設置固定在未來的版本中,有兩種選擇:

  1. 使用模式:靜態在渲染(),因爲這個想法是從圖表中獲取靜態圖像。這會跳過事件綁定,所以內存泄漏將不再是問題。 此外,由於將使用較少的畫布對象,這將顯着減少每個圖表所需的內存。

  2. ,如果你需要的圖表的完整功能(儘管在這種特殊情況下並不需要),調用destroy()中通過的setTimeout延遲功能。這將允許 設置上下文菜單事件,所以destroy()也會解除它們。

+0

謝謝,ZingChart,沒有回覆給我這些建議。但是,下面是其他幾個問題...... 1.在某些情況下,「完成」事件會被多次觸發。所以在這些情況下圖像數據是空白或不完整的。 2.在某些情況下,不會傳輸全部圖像數據。 如果「完整的」事件是一個圖表觸發一次這將是巨大的,並且還提供了完整的圖像數據。希望這是ZingCharts下一個版本中的一部分 – 2012-04-03 16:22:08