VTable:开源支持百万级数据的纯JS表格组件
几十万条数据一滚动就卡,一筛选就卡死?传统表格组件确实扛不住大数据量。今天聊聊开源组件 VTable,它号称能毫秒级渲染百万行数据。是真本事还是噱头?咱们直接扒一扒。
VTable 是字节跳动旗下可视化团队开源的项目,属于 VisActor 可视化解决方案 的一部分。这个名字可能有些陌生,但 VisActor 团队在数据可视化领域已经深耕多年,服务过抖音、今日头条、飞书等多个字节系产品。
简单说,VTable 就是一个前端表格组件库,但它和你在网上找到的普通表格组件有个本质区别:它用 Canvas 画图,而不是用 HTML 元素堆表格。
要理解 VTable 的优势,得先明白传统表格是怎么工作的。
普通的 HTML 表格,每一行、每一列、每一个单元格都是一个独立的 DOM 元素。100 行×20 列的表格,就是 2000 个 DOM 节点。浏览器要为每个节点计算样式、布局、事件监听……
数据量少的时候没问题,但到了十万、百万级别,DOM 节点数量爆炸,浏览器直接"累趴下"。
有些聪明的开发者想到了虚拟滚动:只渲染屏幕上能看到的那些行,滚动了再动态创建新的、销毁旧的。这确实改善了性能,但有个天花板,可视区域内还是要创建大量 DOM 元素,列数一多就扛不住。
VTable 换了个思路:整个表格就一个 Canvas 元素,所有单元格都是用代码"画"出来的。
Canvas 是什么?你可以把它理解为一块画布,JavaScript 可以在上面随意绘制图形、文字、图片。VTable 就是把表格的每个单元格当成一个小图形,用绘制指令画出来。
这样做的好处显而易见:

2. 透视表


基本上就是一个轻量级的在线 Excel。
咱们用个表格易用对比一下:
可以看到,在性能和扩展性上,VTable 有明显优势。当然,如果你只是显示几十行数据,用普通表格组件更简单。
VTable 提供了多种框架的封装版本:
// 原生 JavaScript
import VTable from '@visactor/vtable';
// Vue3
import { VTable } from '@visactor/vue-vtable';
// React
import { VTable } from '@visactor/react-vtable';配置方式也很易用:
const option = {
columns: [
{ field: 'name', title: '姓名' },
{ field: 'sales', title: '销售额' }
],
records: yourDataArray
};
new VTable.ListTable(container, option);官方文档有详细的教程和示例,上手难度中等。
如果只是想显示简单的配置表、表单,几十行数据,那用普通的 Element UI、Ant Design 表格组件就够了,没必要上 VTable。
开源地址:https://github.com/VisActor/VTable
官方文档:https://visactor.com/vtable