Skip to content

什么是 Charturbo? ​

Charturbo 是一个在 GPU 上绘制的 Web 图表库。数据处理在编译为 WebAssembly 的 Rust 中进行,渲染使用 WebGPU(不可用时自动回退到 WebGL2),DOM 只负责标题、图例、坐标轴标签和提示框等文本。它面向在一百万到一千万个数据点下仍需保持流畅交互的图表。

在线示例

架构 ​

层运行位置职责
引擎(charturbo-core)Rust,编译为 WebAssembly按像素列的 M4 降采样、命中检测、堆叠计算、刻度布局、层级与桑基图布局、直方图分箱、箱线图统计、图物理模拟
GPU 渲染器WebGPU,或经由同一 wgpu 管线的 WebGL2线、填充、柱、实例化的点、热力图纹理、十字准线与悬停标记、3D 视图
SDK(Charturbo)TypeScript画布尺寸、输入处理、DOM 叠加层(标题、图例、坐标轴标签、提示框)、无障碍、导出、事件

一个图表经过三个步骤:

  1. render* 调用(例如 renderLineChart)校验输入,并以类型化数组的形式交给引擎。
  2. 引擎只把数据缩减到当前视图所需的量(折线图大约每个像素列一对最小值/最大值),并准备好 GPU 实例。
  3. render() 绘制一帧并更新叠加层 DOM。

缩放和平移只对可见范围重新执行第 2 步,因此每帧的开销主要取决于画布尺寸,而不是数据量。

WebGPU 与 WebGL2 ​

如果浏览器提供 WebGPU 适配器,Charturbo.create(canvas) 会在 WebGPU 上启动引擎;否则同一引擎在 WebGL2 上运行。无需选择后端,API 和渲染结果相同。

渲染器浏览器
WebGPUChrome / Edge 113+,Safari 26+
WebGL2(自动回退)其他现代浏览器

WebGL2 回退模式下的差异:

  • 可选的 GPU 图物理步进(stepPhysicsAsync)改为在 CPU 上运行。
  • 基准测试中,散点图、热力图和多系列图表的 WebAssembly 内存峰值高出 1.6–2.4 倍;帧时间与 WebGPU 基本相同。
  • 浏览器会限制同时存在的 WebGL 上下文数量(16 个左右)。图表较多的页面应共享一个设备,参见共享 GPU 设备。

另外还打包了一个去掉 WebGL2 栈的仅 WebGPU 构建,参见安装与打包工具。

图表目录 ​

分组图表
直角坐标系折线图、面积图、带状图 · 范围图、误差棒 · 脉冲图、柱状图、直方图、散点图 · 气泡图、K 线图 · OHLC、热力图、箱线图 · 小提琴图、组合图、象形柱图、平行坐标
商业图表饼图 · 环形图、雷达图、仪表盘、漏斗图、瀑布图、极坐标、迷你图
层级与流向矩形树图 · 旭日图、桑基图、和弦图、2D 关系图
3DPointCloud3D · Surface3D、3D 网络图、嵌入向量 · 相似度、3D 场景 · 物理

图表通用功能:实时数据流,时间轴 / 对数轴 / 反向轴 / 双 y 轴,滚轮 / 拖拽 / 双指缩放,范围导航器,刷选,仪表盘联动,标注,PNG / SVG / PDF 导出,可选动画,带数据表和键盘导航的无障碍摘要,以及 React / Vue 组件。

适用场景 ​

  • 数据量大或变化快:数百万个样本的时间序列、最多数百万个点的散点图、传感器或行情数据流。
  • 包含大量联动图表的仪表盘(光标与缩放联动,为数百个迷你图共享 GPU 设备)。
  • 数万个节点的网络图和嵌入向量视图。

不适用的场景 ​

  • 在服务器端渲染图表图片。在 Node 中导入是安全的,但引擎只能在浏览器中创建,没有服务器端渲染器。
  • 下载体积比速度更重要的小页面。默认 WebAssembly 模块原始大小约 2.6 MB,gzip 后约 1.0 MB。
  • 既没有 WebGPU 也没有 WebGL2 的环境。此时 Charturbo.create 会 reject;请先用 Charturbo.isSupported() 检查并显示自己的替代内容。
  • 现在就需要稳定 1.x API 的项目。Charturbo 处于 0.x 阶段,minor 版本可能包含破坏性变更(参见更新日志与迁移)。该包尚未发布到 npm(参见安装)。

另请参阅 ​

MIT License