Memory leaks Zing图表内存泄漏,导致浏览器崩溃

Memory leaks Zing图表内存泄漏,导致浏览器崩溃,memory-leaks,Memory Leaks,我们目前正在浏览器窗口上渲染50-100个画布。IE和chrome浏览器都崩溃了。 经过进一步调查,记忆似乎在稳步增长。导致浏览器崩溃 我们正在构建一个打印图表的解决方案来实现这一目标 我们在一个简单页面(iframe)中显示所有图表,用户看不到这些图表 使用图表id获取图像数据 由于图表不可见,我们可以在渲染后“销毁”或将其从内存中删除 但“销毁”并不能减少图表的内存占用 已尝试将对象设置为空。这也不管用 附加的代码片段供您参考 var runner = 0 zingchart.complet

我们目前正在浏览器窗口上渲染50-100个画布。IE和chrome浏览器都崩溃了。 经过进一步调查,记忆似乎在稳步增长。导致浏览器崩溃

我们正在构建一个打印图表的解决方案来实现这一目标

  • 我们在一个简单页面(iframe)中显示所有图表,用户看不到这些图表
  • 使用图表id获取图像数据
  • 由于图表不可见,我们可以在渲染后“销毁”或将其从内存中删除
  • 但“销毁”并不能减少图表的内存占用
  • 已尝试将对象设置为空。这也不管用
  • 附加的代码片段供您参考

    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++;
            }
        }
    }
    
    var runner=0
    zingchart.complete=功能(dataObj){
    对于(i=0;i

    任何建议都很好

    以下是ZinChart开发团队关于此问题的说明:


    这里的问题是render()->complete event->image generation->destroy()是一个闭环

    ZingChart库的工作方式是,为了尽快启动complete,代码在启动complete后绑定上下文菜单事件。 因此,由于destroy被立即调用,上下文菜单事件被忽略,并开始添加50-100个图表,导致内存泄漏

    为了在上下文菜单设置后触发完整事件,将在下一版本中对此进行更改和修复,但是,对于当前设置,有两个选项:

  • 使用mode:static on render(),因为其目的是从图表中获取静态图像。这将跳过事件绑定,因此内存泄漏不再是问题。 此外,由于将使用更少的画布对象,这将大大减少每个图表所需的内存

  • 如果需要图表的完整功能(尽管在这种特殊情况下不需要),请通过setTimeout在延迟函数中调用destroy()。这将允许 对于要设置的上下文菜单事件,so destroy()也将解除它们的绑定


  • 谢谢,ZingChart,你给了我这些建议。然而,以下是一些其他问题。。。1.在某些情况下,“完成”事件会被多次触发。因此,在这些情况下,图像数据是空白的或不完整的。2.在某些情况下,不传输完整的图像数据。如果为图表触发一次“complete”事件并提供完整的图像数据,那就太好了。希望在Zingchart的下一个版本中包含这一点