gpt4 book ai didi

javascript - 加载 Highcharts 文档时 DOM 节点计数增加 (Chrome)

转载 作者:行者123 更新时间:2023-11-28 01:58:14 26 4
gpt4 key购买 nike

我有一个网页,可以定期加载 Highcharts 图表 - 就像循环播放幻灯片一样。我的问题是,运行几个小时后,Chrome 中的网络崩溃(目前无法选择其他浏览器),并显示“噢,啪!显示此网页时出现问题。”

使用“Chrome开发工具->时间轴”我可以看到“DOM节点数”不断增加。(还有文档数)。

这是一个更大的网络的一部分,所以我无法发布代码。不过,我创建了一个以类似方式执行操作的页面。我使用 JQuery.load() 加载图表。

旋转纯 HTML 页面时,DOM 计数不会增加(被垃圾收集)。

请有人告诉我我做错了什么?我可以用不同的方式来做吗?这是 Highcharts 的错误吗?欢迎提出有关如何解决此问题的任何建议。

下面是一些可以产生此行为的代码。 (抱歉我无法让它在 jsfiddle 中工作)(在“$(document).ready”函数中注释和取消注释以在加载方法之间进行更改)

我已将此页面放在这里:http://memoryleak.ivarragnarsson.com您可以在其中选择查看泄漏的 Highcharts 版本或标准 HTML 加载非泄漏版本。

“内存泄漏.html”

<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="http://code.highcharts.com/highcharts.src.js"></script>

<script type="text/javascript">
function UpdateGraphsDiv()
{
if (typeof window.chart != 'undefined')
{
window.chart.destroy();
}

$.ajaxSetup({ cache: false, async: false });
$("#chartcontainer").load("graph.html");
}

$(document).ready(function ()
{
UpdateGraphsDiv(); setInterval(UpdateGraphsDiv, 5000); //Updates graph in div using JQuery Load
});


</script>
</head>
<body>
<div id="chartcontainer"></div>
</body>
</html>

“图.html”

<div id='container1' style='min-width: 310px; height: 400px; margin: 0 auto'></div>
<script type='text/javascript'>
$(function ()
{
$('#container1').highcharts({
chart: {
type: 'column'
},
title: {
text: 'Monthly Average Rainfall'
},
subtitle: {
text: 'Source: WorldClimate.com'
},
xAxis: {
categories: [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
]
},
yAxis: {
min: 0,
title: {
text: 'Rainfall (mm)'
}
},
tooltip: {
headerFormat: '<span style=""font-size:10px"">{point.key}</span><table>',
pointFormat: '<tr><td style=""color:{series.color};padding:0"">{series.name}: </td>' +
'<td style=""padding:0""><b>{point.y:.1f} mm</b></td></tr>',
footerFormat: '</table>',
shared: true,
useHTML: true
},
plotOptions: {
column: {
pointPadding: 0.2,
borderWidth: 0
}
},
series: [{
name: 'Tokyo',
data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]

}, {
name: 'New York',
data: [83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3]

}, {
name: 'London',
data: [48.9, 38.8, 39.3, 41.4, 47.0, 48.3, 59.0, 59.6, 52.4, 65.2, 59.3, 51.2]

}, {
name: 'Berlin',
data: [42.4, 33.2, 34.5, 39.7, 52.6, 75.5, 57.4, 60.4, 47.6, 39.1, 46.8, 51.1]

}]
});
});
</script>
</div>

请告诉我如何停止 DOM 节点的累积。

最佳答案

按照约定,调用chart.destroy()解决了大部分DOM节点增加的问题。根据 Ivar 的示例,我可以看到它不依赖于 Highcharts(参见附图) - 看起来 jQuery.load() 没有正确清理以前的内容。

左:无图表 ||右:有图表Left: without chart || Right: with chart

关于javascript - 加载 Highcharts 文档时 DOM 节点计数增加 (Chrome),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18785583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com