据我了解,Highcharts 很可能只会重绘脏组件(在您的情况下是该点所属的系列)。
源代码的一些点点滴滴chart.redraw()
看起来像
// redraw affected series
each(series, function (serie) {
if (serie.isDirty && serie.visible &&
(!serie.isCartesian || serie.xAxis)) { // issue #153
serie.redraw();
}
});
当您调用 时point.update()
,只有该点所属的系列被标记为脏。因此在下一次chart.redraw()
调用时重绘,而其他未更新点的系列将不会重绘。
chart.redraw()
话虽如此,除了上述之外,还有其他一些代码。主要用于重绘轴和图例和其他东西。似乎其中大多数也是基于类似的isDirty
逻辑重新绘制的,因此不应成为性能障碍。但是,如果性能确实是一个关键因素,您可以point.update()
使用第二个参数调用 as false
,这将跳过隐式chart.redraw()
调用,从而跳过其中的所有内容。然后,您可以显式调用series.redraw()
您希望更新的特定系列(该点所属的系列)上的方法。
注意:这不会重绘轴(和其他东西),如果点的更新值超出当前轴的极值,则可能需要重绘。还有series.redraw()
未在文档中列出,可能表明不鼓励使用它并可能产生意外结果。
在 99% 的情况下,我会采用这种chart.redraw()
方式,因为大多数时候性能是可以接受的。
参考资料:
point.update()
api参考
Demo@JsFiddle