echarts大量数据性能优化处理

当使用 ECharts 渲染大规模数据时,可能会出现性能问题例如渲染卡顿。这通常是因为浏览器在处理大量的 DOM 节点时会变得相当缓慢。

  1. 关闭动画:ECharts默认的动画效果会消耗一些性能,对于大数据量的图表,可以尝试关闭动画。
    在数据量特别大的时候,为图形应用动画可能会导致应用的卡顿,这个时候我们可以设置animation: false关闭动画。
    对于数据量会动态变化的图表,我们更推荐使用animationThreshold这个配置项,当画布中图形数量超过这个阈值的时候,ECharts 会自动关闭动画来提升绘制性能。这个配置往往是一个经验值,通常 ECharts 的性能足够实时渲染上千个图形的动画(我们默认值也是给了 2000),但是如果你的图表很复杂,或者你的用户环境比较恶劣,页面中又同时会运行很多其它复杂的代码,也可以适当的下调这个值保证整个应用的流畅性。
let option = {
   
  animation: false,
  series: [
    // ...
  ]
};
echarts.setOption(option);
  1. 使用 large 模式: ECharts 在 series 中提供了一个 large选项,当数据量特别大(如超过千条数据)时,可以尝试开启 large 模式,此模式下会对绘制进行优化。
let option = {
   
  series: [
    {
   
      type: 'scatter',
      large: true,
      data: largeData,
    },
  ],
};
echarts.setOption(option);
  1. 启用进度渲染:对于特别大的数据集,我们可以启用 ECharts
    的渲染进度条。这可以让用户知道渲染的进度,同时也可以避免浏览器在渲染过程中出现无响应的现象。

这需要在初始化 ECharts 实例时,将 option 中的 progressive 和 progressiveThreshold 属性设置为合适的值。在数据量大于 progressiveThreshold 时,图表会启用渐进渲染。

let option = {
   
  series: [{
   
    type: 'lines',
    data: largeData,
    // 开启渐进式渲染
    progressive: 2000,
    // 渲染阈值,大于此值则启动渐进渲染
    progressiveThreshold: 5000,
  }],
};
echarts.setOption(option);
  1. 增加滑动轴和懒加载
const option = {
   
...
dataZoom: [
    {
   
      type: 'slider',
      xAxisIndex: 0,
      filterMode: 'none'
    }
  ]
...
}

myChart.on('dataZoom', function (params) {
   
...

这种方法能够很好展示部分区间的数据,但是缺点也很明显,很难看到全局的数据,而且要重复的请求和监听,这对于大屏来说无疑不太合适

  1. 数据降维或者降采样

折线图在数据量远大于像素点时候的降采样策略,开启后可以有效的优化图表的绘制效率,默认关闭,也就是全部绘制不过滤数据点。

可选:


var option = {
   
  series: {
   
    type: "line",
    sampling: "lttb", // 最大程度保证采样后线条的趋势,形状和极值。
  },
};


'lttb' 采用 Largest-Triangle-Three-Bucket 算法,可以最大程度保证采样后线条的趋势,形状和极值。
'average' 取过滤点的平均值
'min' 取过滤点的最小值
'max' 取过滤点的最大值
'minmax' 取过滤点绝对值的最大极值 (从 v5.5.0 开始支持)
'sum' 取过滤点的和

优点

  • 使用简单,ECharts 内部降采样算法,效果显著
  • 可以完整的将曲线趋势展示出来,和原曲线基本一致

缺点

  • 并不是展示的所有点,会删除一些无用的点,保证渲染性能
  • 最大程度保证采样后线条的趋势,形状和极值,但是某些情况下,极值有偏差,测试中发现
  1. 数据进行筛选和抽样来减少渲染点数
    简单随机抽样

在这个例子中,我们首先抓取所有的原始数据,然后从中随机抽取一定数量的样本。这会确保所有的数据都有相同的被选择为样本的机会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值