测试目的
Echarts折线图,大量数据异步加载导致dataZoom组件拖动缩放时间轴卡顿
测试环境
- 本地json,28006条数据;
- ajax异步加载;
$(function () { var dataUrl = "data/data.json" $.ajax({ type: "get", url: dataUrl, async: true, data: {}, dataType: "json", success: function (res) { var exData = res.data; console.log(exData); var lineData = [], LineName = []; if (exData.length > 0) { for (var i = 0; i < exData.length; i++) { lineData.push(exData[i].value); LineName.push(exData[i].time.slice(11, 16)); } } //调用封装函数; getLine(LineName, lineData); }, error: function (err) { console.log(err + "请求数据失败!"); } }); })
解决方案
series-line. samplingstring
折线图在数据量远大于像素点时候的降采样策略,开启后可以有效的优化图表的绘制效率,默认关闭,也就是全部绘制不过滤数据点。
可选:
‘average’ 取过滤点的平均值
‘max’ 取过滤点的最大值
‘min’ 取过滤点的最小值
‘sum’ 取过滤点的和
效果比较
未采用sampling降采样策略
sampling: ‘average’
采用sampling降采样策略
结论说明
- 加载数据大小相同,加载时间基本相同;
- 使用sampling降采样策略,dataZoom组件拖动缩放时间轴卡顿明显解决。
其他配合条件
根据实际情况,可以将echarts不必要的动画和标志图形关闭,已达到显示数据为主,效果为辅的目的。
series-line. showAllSymbol = ‘auto’
只在主轴为类目轴(axis.type 为 ‘category’)时有效。 可选值:
‘auto’:默认,如果有足够空间则显示标志图形,否则随主轴标签间隔隐藏策略。
true:显示所有图形。
false:随主轴标签间隔隐藏策略。
series-line. animation = true
是否开启动画。
series-line. showSymbol = true 是否显示 symbol, 如果 false 则只有在 tooltip
hover 的时候显示。
方案代码
series: [{ data: lineData, //showSymbol: false, sampling: 'average',//降采样策略 //showAllSymbol: false, type: 'line' }]
Done!