一段时间以来,我在重绘图表时遇到性能问题
例如当我尝试使用setData
函数在图表上重绘单个系列时-它重绘了所有系列
在调试时,我发现每个轴/系列上都有一个isDirty
选项,如果在任何轴/系列上都正确,则整个图表将被重画
然后,我试图找出我的哪些元素具有该选项-并认识到只有一个元素具有该选项:
yAxis.push({
max: 100,
min: 0,
visible: false
});
那是我在图表上用于其他数据的不可见轴
问题恰好在visible
标志上,当它为真时-一切正常且正常
当它为假时-它占用了表演的很大一部分
我没有发现任何影响性能的isDirty
标志或visible: false
那么有没有isDirty
标志的隐藏轴的可能性吗?
UPD 简单的小提琴来显示它
https://jsfiddle.net/q6ntdxsy/8/
更改js部分中的第一个轴visible
标志,并且isDirty
将为false
答案 0 :(得分:0)
轴渲染后,每个轴的内部“ isDirty”标志均设置为false。不会渲染不可见的轴,因此在可见状态更改之前,此标志将设置为false。如果一个轴脏了,则重新绘制所有轴。
您可以从Highcharts源代码:https://code.highcharts.com/highcharts.src.js
推断出它是如何工作的。解决方案可能是实验性的覆盖“渲染”方法,以禁用隐藏轴的“ isDirty”标志。
// Axes
if (chart.hasCartesianSeries) {
each(axes, function(axis) {
if (axis.visible) {
axis.render();
// Disable 'isDirty' flag for invisible axes
} else {
axis.isDirty = false;
}
});
}