摘要:大家好,我是徐小夕。架构师,曾任职多家上市公司,多年架构经验,打造过上亿用户规模的产品,目前全职创业,主要聚集于“Dooring AI零代码搭建平台”和“flowmixAI多模态办公软件”
大家好,我是徐小夕。
架构师,曾任职多家上市公司,多年架构经验,打造过上亿用户规模的产品,目前全职创业,主要聚集于“Dooring AI零代码搭建平台”和“flowmixAI多模态办公软件”
之前和大家分享了我实现的 pxcharts 多维表格编辑器和协同文档编辑器:
px-doc,一款开箱即用的协同文档编辑器
pxcharts多维表格ultra版:AI + 多维表,工作效率飙升!
最近也花了很多时间,开源了一款基础多维表格编辑器——vue-mute-table。它基于 Vue 3 实现,提供了高性能的表格编辑体验,并支持复杂的表格操作,今天就带大家深入剖析一下这个项目。
github地址:https://github.com/MrXujiang/vue-mute-table
项目介绍
vue-mute-table 多维表格编辑器是一个基于 Vue 3 的高性能数据表格应用,支持虚拟滚动、海量数据处理、多视图展示和实时编辑。该项目采用主流前端技术栈,提供了类似 Airtable 或 Notion 的表格编辑体验。
为了更好的让大家了解这款开源项目,我总结了一下几个功能亮点:
高性能虚拟滚动支持数万条记录的流畅滚动只渲染可见区域,大幅降低内存占用支持分组数据的虚拟滚动能根据容器大小自动调整多视图支持传统的表格视图卡片式的看板视图单条记录的表单视图不同视图模式间可以无缝切换灵活的字段系统支持多种字段类型:文本、数字、日期、选择等可在运行时动态添加、删除、修改字段内置数据验证规则可配置字段宽度、可见性、必填等属性强大的数据处理多条件组合筛选支持多字段排序按字段值自动分组模糊搜索功能丰富的交互体验列拖拽调整顺序行拖拽调整顺序鼠标拖拽调整列宽支持分组内的拖拽排序接下来和大家分享一下它的技术栈实现,供大家学习参考。
Vue 3.4.15 - 渐进式 JavaScript 框架,采用 Composition APITypeScript 5.3.3 - 提供类型安全和更好的开发体验Vite 5.0.12 - 快速的前端构建工具,支持热重载拖拽与排序图表与可视化Chart.js 4.4.1 - 图表库Vue ChartJS 5.3.0 - Vue Chart.js 集成上面的技术方案在做任何项目都有非常好的参考价值,如果你正好也有类似的需求,可以参考上面我列出的技术栈。
接下来和大家分享一下我设计多维表格编辑器的技术架构。
技术架构设计
vue-mute-table多维表格编辑器采用现代化的前端架构设计,基于 Vue 3 + TypeScript + Pinia 构建,具有高性能、可扩展、易维护的特点。
用户操作 → 组件事件 → Store Actions → 状态更新 → 视图响应 ↓本地存储 ← 数据持久化 ← 状态变化监听// stores/table.ts 核心状态结构interface TableState { // 数据模型 fields: Field // 字段定义 records: Record // 数据记录 views: View // 视图配置 // UI 状态 currentViewId: string // 当前视图 selectedRecords: string // 选中记录 editingCell: CellRef | null // 编辑状态 // 数据处理 filters: FilterCondition // 筛选条件 sorts: SortCondition // 排序条件 groupBy: string | null // 分组字段}2. 虚拟滚动架构
核心算法实现如下:
// 虚拟滚动计算const startIndex = Math.max(0, Math.floor(scrollTop / rowHeight) - overscan)const endIndex = Math.min( totalRecords - 1, startIndex + visibleCount + overscan * 2)const offsetY = startIndex * rowHeightconst visibleHeight = (endIndex - startIndex + 1) * rowHeight大家可以参考一下,在设计对性能要求比较高的复杂系统时,非常有帮助。
组件架构设计
App.vue├── TableView.vue│ ├── AppHeader.vue│ ├── AppSidebar.vue│ ├── TableToolbar.vue│ └── TableContainer.vue│ └── VirtualTable.vue│ ├── VirtualRow.vue│ ├── CellRenderer.vue│ └── CellEditor.vue└── Modals/ ├── FieldManagerModal.vue ├── FilterModal.vue ├── GroupModal.vue └── FormGeneratorModal.vue性能层级架构设计
对于多维表格这种复杂表格设计,性能优化往往非常复杂,考虑的点也非常多,
我这里总结了4层性能优化架构,大家可以拿来即用,建议重点收藏。同时我们在做系统性能指标时,也有很多可量化的指标,这里和大家分享几个:
首屏渲染时间滚动帧率60fps内存使用交互响应时间好啦,今天就分享到这,如果大家对多维表格感兴趣,也欢迎随时和我交流。
来源:趣谈前端