apache / echarts

Apache ECharts is a powerful, interactive charting and data visualization library for browser
https://echarts.apache.org
Apache License 2.0
60.53k stars 19.61k forks source link

[Feature] lttb采样可以添加点数参数吗 #20165

Open zkycaesar opened 3 months ago

zkycaesar commented 3 months ago

What problem does this feature solve?

目前lttb采样好像没有可以配置参数的地方,如果我的点数很多,比如上亿,那就算是开了lttb,渲染也十分慢。所以是不是可以把参数开放出来,让用户可以调节采样的力度。

What does the proposed API look like?

比如像这几个库这样,开放lttb参数: simplify-js downsample-lttb

Ovilia commented 3 months ago

如果是上亿数据,应该考虑在服务端做采用处理,不要返回这么多的数据

zkycaesar commented 3 months ago

如果是上亿数据,应该考虑在服务端做采用处理,不要返回这么多的数据

确实应该后端采样。只是我们现在的应用还需要dataZoom,如果是后端采样的话,一个是前后端就需要频繁地交换数据,另一个是好像就没法利用现成的这个dataZoom组件了。

@Ovilia 针对这个场景,您有什么建议吗?还是说我们只能自己来实现dataZoom了?

zkycaesar commented 3 months ago

对了,另外还有几个点看是不是有优化空间:

这几个点可以让我们的应用优化更多的内存占用。

Ovilia commented 3 months ago

最佳的解决方案是从产品设计的角度思考:

  1. 是否有必要展现上亿数据,和使用后端采样后的数据相比,是否提供了足够大的价值来支撑这一代价
  2. 是否存在其他交互方式的可能性,或者拆分多个图表等方案,从产品设计角度思考其他可能性,比较各自的优劣

仅从纯技术角度优化的话:ECharts 官方对散点图的大数据支持量级是千万级别的,参见 https://echarts.apache.org/examples/en/editor.html?c=lines-ny 以及 https://github.com/apache/echarts/blob/master/test/linesGL-ny-appendData.html 。使用 progressive 渐进式渲染,后者使用二进制文件,体积更小,使用 WebGL 加速渲染。

折线图好像是必须要传x坐标数组?但其实很多简单情况下,x就是递增下标。如果能只传y数组就更好了。

y坐标现在好像是用Float64Array?但我们经常是用Float32,甚至Float16也能忍受。

ECharts 为了针对各种场景都表现良好,必须保证足够的通用性设计。如果你觉得这样的优化可以帮助你们在特定场景下提高性能,可以尝试 fork 出来修改源码,看看是不是能起到优化的效果。