我们目前正在浏览器窗口上渲染50-100画布。浏览器IE和Chrome崩溃。 在进一步调查中,看起来像记忆正在稳步上升。导致浏览器崩溃。
我们正在构建打印图表的解决方案为实现这一目标,
附件摘录供您参考,
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 :(得分:0)
以下是关于ZinChart开发团队问题的说明:
这里的问题是render() - &gt;完成事件 - &gt;图像生成 - &gt; destroy()是一个闭环。
ZingChart lib的工作方式,为了尽快触发完成,代码在完成触发后绑定了上下文菜单事件。 因此,由于立即调用destroy,上下文菜单事件被打开,并且开始添加50-100个图表,导致内存泄漏。
这将改变&amp;固定在下一个版本中,以便在上下文菜单设置后触发完整事件,但是,使用当前设置,有两个选项:
使用mode:static on render(),因为我们的想法是将静态图像从图表中取出。这会跳过事件绑定,因此内存泄漏将不再是问题。 此外,由于将使用较少的画布对象,这将大大减少每个图表所需的内存。
如果您需要图表的完整功能(虽然在这种特殊情况下不需要),请通过setTimeout调用延迟函数中的destroy()。这将允许 对于要设置的上下文菜单事件,destroy()也将取消绑定它们。