当前位置: 首页 > 知识库问答 >
问题:

性能优化 - 前端如何绘制能容纳亿级别的折线图?

巫马浩言
2024-08-05

前端如何绘制能容纳亿级别的折线图?
项目需要绘制一个折线图,这个折线图要容纳亿级数据量,并且是实时更新的,就是这个统计图一直在绘画,每秒都在更新,然后并且能支持查看很久之前的统计图,比如说我点到之前的某个点,这个点就会放大,以前的数据不删除。

已经使用的方式是highcharts,引入,

import Boost from "highcharts/modules/boost.js";
import highstock from 'highcharts/modules/stock.js'
highstock(Highcharts)
Boost(Highcharts);

实时更新是使用

series.addPoint([x, y], true, false, false);

数据是批量过来的,通过websocked, highcharts好像没有addPoints这种方法只能单个点加载
这样的话,历史数据加载百万级是没有问题的,但是实时渲染到几千个点就不行了,只能坚持几分钟浏览器已经卡的不能动了,
要求是能看最近几天的数据

现在的难点在于如何实时更新,这个统计图数据量很大的这种

共有3个答案

杨波娃
2024-08-05

1.highcharts默认开启数据聚合(plotOptions.series.dataGrouping.enabled = true),在开启dataGrouping的情况下,折线图上展示的数据就是采样数据。
2.highcharts line图 支持scrollbar,可以实现图的缩放(印象里highcharts不支持点击放大)。

dataGrouping + scrollbar应该能够满足题主的需求。单图的点上亿,这个数据量highcharts性能能不能支持,这个不确定。如果highcharts支持不了,建议改交互,把时间区间分开,在数据层面实现大量数据的拆分。

庄元龙
2024-08-05

应该是前后拖动的时候,动态修改数据项吧?
不知道dataZoom跟你的需求对不对得上。

丁茂
2024-08-05

看得见的部分用采样技术减小数据量,看不见的部分用类似虚拟列表的技术隐藏。数据保存可以用数据库(IndexDB)

参考:后端一次传过来2000万条数据,前端怎么处理?

 类似资料:
  • 我开始写前端应用的时候,并不知道一个 Web 应用需要优化那么多的东西。编写应用的时候,运行在本地的机器上,没有网络问题,也没有多少的性能问题。可当我把自己写的博客部署到服务器上时,我才发现原来我的应用在生产环境上这么脆弱。 我的第一个真正意义上的 Web 应用——开发完应用,并可供全世界访问,是我的博客。它运行在一个共享 256 M 内存的 VPS 服务器上,并且服务器是在国外,受限于网络没有备

  • JIT与GC优化 > untyped(无类型)。 JAVASCRIPT是个无类型的语言,这导致了如x=y+z这种表达式可以有很多含义。 y,z是数字,则+表示加法。 y,z是字符串,则+表示字符串连接。 而JS引擎内部则使用“细粒度”的类型,比如: 32-bit* integer。 64-bit* floating-point。 这就要求js类型-js引擎类型,需要做“boxed/unboxed(

  • 本文向大家介绍前后端性能如何调优?相关面试题,主要包含被问及前后端性能如何调优?时的应答技巧和注意事项,需要的朋友参考一下 减少http请求数 使用内容分布式网络 给头部添加一个失效期或者Cache一Control Gzip压缩组件 把样式表放在前面 把脚本放在最后 不使用CSS表达式 使用外部的JavaScript和CSS 减少DNS的查询 缩小JavaScript和CSS

  • 本文向大家介绍js如何性能优化?相关面试题,主要包含被问及js如何性能优化?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 减少HTTP请求 使用内容发布网络(CDN) 添加本地缓存 压缩资源文件 将CSS样式表放在顶部,把javascript放在底部(浏览器的运行机制决定) 避免使用CSS表达式 减少DNS查询 使用外部javascript和CSS 避免重定向 图片lazyLoad  

  • A curated list of Web Performance Optimization. Everyone can contribute here! Categories :memo: Articles :newspaper: Blogs :books: Books :book: Docs :movie_camera: Talks Tools Analyzers Analyzers API