Echarts渲染海量数据处理方案
文章类型:Vue
发布者:hp
发布时间:2024-11-19
在项目开发过程中,有时候会遇到echars进行渲染数据,面对海量数据,我们需要怎么处理呢,如果一次性全部渲染,那么页面就会卡顿,空白很久,才会渲染完成,
1:Datazoom(数据分段加载)主要是用于分区域渲染,然后自然的关注数据的细节,或者浏览整体
dataZoom: [{
type: 'slider', // 值:inside slider
start: 0, // 数据窗口范围的起始百分比
end: 100, // 数据窗口范围的结束百分比
realtime: true, // 是否实时更新 true/false
xAxisIndex: 0, // 表示特定的X轴索引
minSpan: 0, // 用于限制窗口大小的最小值(百分比值),取值范围是 0 ~ 100。
maxSpan: 100, // // 用于限制窗口大小的最大值(百分比值),取值范围是 0 ~ 100。
// 特别提醒:start: 设置为0, 说明是从第1条数据开始的; 那么xAxisIndex就必须是0; 因为xAxisIndex不是0,他们就互相矛盾了。
filterMode: 'filter'
}, {
type: 'slider',
start: 0,
end: 100,
realtime: true,
yAxisIndex: 0, // 表示特定的y轴索引
minSpan: 0,
maxSpan: 100,
filterMode: 'empty'
}]
2:Sampling(降采样策略),减少数据点的数量,减少渲染负担,以提高性能或提供更清晰的视觉表现
series: [{
name: '销量',
data: sampledData,
type: 'bar',
sampling: 'lttb',
// sampling的值:
// 'lttb' 采用 Largest-Triangle-Three-Bucket 算法,可以最大程度保证采样后线条的趋势,形状和极值。
// 'average' 取过滤点的平均值
// 'min' 取过滤点的最小值
// 'max' 取过滤点的最大值
// 'minmax' 取过滤点绝对值的最大极值 (从 v5.5.0 开始支持)
// 'sum' 取过滤点的和
}, {
name: '金额',
data: sampledData,
type: 'line'
}],
<template>
<div ref="chart" style="width: 100%; height: 400px;"></div>
</template>
<script>
import * as echarts from 'echarts'
export default {
name: 'ChartComponent',
props: {
echartsdata: Array // 假设传入的数据是数组
},
mounted () {
this.initChart()
},
watch: {
echartsdata (newval, oldval) {
this.initChart()
}
},
methods: {
initChart () {
const chart = echarts.init(this.$refs.chart)
const sampledData = this.echartsdata
const option = {
// ECharts 配置项
xAxis: {
type: 'category'
// data: Array.from({ length: sampledData.length }, (_, i) => i)
},
yAxis: {
type: 'value'
},
series: [{
name: '销量',
data: sampledData,
type: 'bar',
sampling: 'min',
// 'lttb' 采用 Largest-Triangle-Three-Bucket 算法,可以最大程度保证采样后线条的趋势,形状和极值。
// 'average' 取过滤点的平均值
// 'min' 取过滤点的最小值
// 'max' 取过滤点的最大值
// 'minmax' 取过滤点绝对值的最大极值 (从 v5.5.0 开始支持)
// 'sum' 取过滤点的和
}, {
name: '金额',
data: sampledData,
type: 'line'
// sampling: 'lttb', // 最大程度保证采样后的线条趋势。
// sampleSize: 10
}],
dataZoom: [{
type: 'slider', // 值:inside slider
start: 0, // 数据窗口范围的起始百分比
end: 100, // 数据窗口范围的结束百分比
realtime: true, // 是否实时更新 true/false
xAxisIndex: 0, // 表示特定的X轴索引
minSpan: 0, // 用于限制窗口大小的最小值(百分比值),取值范围是 0 ~ 100。
maxSpan: 100, // // 用于限制窗口大小的最大值(百分比值),取值范围是 0 ~ 100。
// 特别提醒:start: 设置为0, 说明是从第1条数据开始的; 那么xAxisIndex就必须是0; 因为xAxisIndex不是0,他们就互相矛盾了。
filterMode: 'filter'
}, {
type: 'slider',
start: 0,
end: 100,
realtime: true,
yAxisIndex: 0, // 表示特定的y轴索引
minSpan: 0,
maxSpan: 100,
filterMode: 'empty'
}]
}
chart.setOption(option)
}
}
}
</script>
1:DataZoom(数据分段加载)
A:优点
配置简单:通过设置 start 和 end 属性,可以控制图表渲染的数据范围,从而提高性能。
流畅渲染:页面渲染速度非常快,能够实现快速渲染大量数据而不影响用户体验。
B:缺点
局部数据展示:只能查看指定局部的数据,无法查看整体数据,限制了用户对数据整体趋势的把握。
2:Sampling(降采样策略)
A:优点
整体趋势可见:允许用户看到数据的整体趋势,而不是仅限于局部数据。
减少数据点:通过减少数据点的数量,减轻渲染负担,提高性能,尤其是在数据点非常多的折线图中效果明显。
B:缺点
数据丢失:能会导致部分数据丢失,这对于需要精确数据的用户来说可能是一个问题。
tooltip功能可能受限:由于数据点的减少,一些图表的交互功能,如 tooltip,可能无法实现或受到影响。
1:DataZoom 适合于需要快速渲染大量数据的场景,而 Sampling 更适用于需要观察数据整体趋势的情况
四: