程序员老鬼

Glide Data Grid 这个开源数据表格组件,能流畅处理百万级行数据。

做后台、做报表的同学,应该都有过这种时刻:产品一句“这里加个导出和在线预览”,后端一查是几十万行数据,前端 table 一挂上去,页面直接卡成 PPT。开发机还能勉强滚一滚,一到线上,用户拖一下滚动条,浏览器 CPU 就开始狂飙。

传统表格组件的问题也老生常谈了:本质还是堆 DOM。行一多、列一多,上来就是几万甚至十几万个节点往页面里怼,浏览器排版、重绘压力瞬间拉满。哪怕你做了分页、做了简单虚拟滚动,只要交互稍微复杂一点,就又开始掉帧。

Image

最近逛 GitHub 的时候,看到一个挺对路子的开源项目:Glide Data Grid。定位很直接,就是专门解决“大数据量表格渲染”这个痛点的,底层完全走 Canvas 渲染路线,不再用一堆 div、table 去撑画面。官方自己都说了,百万级行数据照样能流畅滚。

它的核心思路其实很清晰:按需渲染 + 原生滚动。页面上你看到的,只是当前可见区域那一小撮单元格,其他地方统统不画;用户滑动滚轮的时候,浏览器负责处理滚动,组件只是在你滑到的那块区域,用 Canvas 把对应单元格重新绘制一遍。少掉的,是成千上万的 DOM 节点,多出来的,是顺滑的滚动体验。

在交互层面,它又没有走“性能优先、体验将就”的路子。列拖拽重排、拖拽调整宽度,行高可变,单元格合并,这些日常需求都支持。选中逻辑也比较丰富,行选、列选、单元格单选/多选一应俱全,做那种“点击一块区域就整体复制”的操作没什么压力。

Image

单元格类型这块也挺讲究的,不是只给你一个“字符串灌进去就完事”的模型。文本、数字这类基础类型自带编辑能力,你可以直接在网格里改数据;需要更复杂的,也给了自定义方案,可以完全接管单元格绘制,在 Canvas 上画图标、状态点、小图表,做一些类似 Excel 的高密度信息展示。

功能层面还有几个小加分:内置搜索,支持冻结列,适合做那种“左边锁住关键字段,右边横向滚一长串指标”的报表页面。再加上它兼容 React 16 到 19,老项目、增量项目都能用,没把门槛抬得很高,对存量系统也算比较友好。

想试可以先拉个 demo 玩一玩,看看在你自己的数据规模下,滚动、选区、编辑这些常用操作是不是足够跟手。如果你现在用的表格,一到几万行就开始抽风,这种专门为“大体量数据”设计的组件,可能比你继续给老 table 打补丁更靠谱。

Image

有意思的是,这类组件往往只有在“真数据”上才能看出差距:测试时灌一两千行谁都很顺,但一旦挂上真实业务数据,那种“滑轮刚动就卡、选区一拉就抖”的体验,用户比开发更敏感。要是你最近正好在重构后台、或者准备上一个重报表的项目,不妨把 Glide Data Grid 收进工具箱,哪天要给领导演示个“几十万行照样飞”的页面,还挺有面子。

你现在在用的表格方案是啥?Ant Table、MUI DataGrid,还是自己撸虚拟列表?有踩过什么大数据量的坑,也可以在评论区分享一下,大家互相抄作业。

GitHub地址:github.com/glideapps/glide-data-grid