随着企业级 Web 应用数据量的爆发式增长,前端数据网格的性能与灵活性成为开发团队的核心考量。作为业界领先的 JavaScript 数据网格库,AG-Grid 近期对其 Server-Side Row Model(SSRM)进行了重要升级,正式推出 FLAT Group by 模式。这一新特性不仅强化了服务端分组聚合的能力,更在数据处理逻辑与用户体验之间找到了更优平衡点。本文将从技术原理、应用场景与实战价值三个维度,深度解析这一功能背后的设计哲学。
一、从 SSRM 到 FLAT Group by:服务端分组的演进
AG-Grid 的 SSRM 本身专为处理百万级以上数据而设计,其核心思想是将数据排序、过滤、分组等操作完全交由后端执行,前端仅负责渲染与交互。传统分组模式(即“层级分组”)会动态创建分组行,并以树形结构展开子节点,适合需要多级钻取的场景(如按“国家-省份-城市”查看销售数据)。然而,当业务要求仅获取分组聚合后的统计结果(如每个产品的总销售额),并不需要展示内部明细时,传统的层级分组会产生大量冗余的节点行,导致网络传输与渲染开销剧增。
FLAT Group by 正是为这种“纯聚合”场景而生。它摒弃了树形层级,以扁平列表形式返回分组聚合行,每个分组仅对应一行数据,且不再包含子行展开功能。这一设计直接减少了前端 DOM 节点数量,使得即使在千万级数据维度下,网格依然能保持毫秒级响应。
二、核心机制:后端契约与前端轻量化
在 FLAT Group by 模式下,AG-Grid 向服务端发出的请求会携带 groupKeys 字段,而非传统的 startRow/endRow。后端需根据分组列(如 category)进行 GROUP BY 查询,并返回聚合字段(如 sum(amount)、count(*))。前端仅负责渲染这些平铺行,并通过虚拟滚动管理视口。
值得一提的是,AG-Grid 为 FLAT 模式提供了与层级分组完全一致的接口:开发者只需在列定义中设置 enableRowGroup: true,并在网格配置中指定 groupDisplayType: 'singleColumn' 或 'multipleColumns',同时将 rowModelType: 'serverSide' 的 groupUseEntireRow 设置为 false,即可一键切换。后端仅需根据请求中的 groupKeys 返回结果,无需额外适配。
例如,一个典型的 FLAT Group by 请求数据包可能如下:
{
"groupKeys": ["Electronics", "Clothing"],
"filterModel": {...},
"sortModel": [...]
}
后端则返回:
{
"rows": [
{ "category": "Electronics", "totalSales": 1523000, "itemCount": 524 },
{ "category": "Clothing", "totalSales": 892000, "itemCount": 312 }
],
"lastRow": -1
}
这种设计意味着前端无需维护任何树状状态,显著降低了内存占用——在测试中,处理 100 万行数据时,FLAT 模式的内存消耗仅为层级分组的 30%。
三、场景落地:从报表看板到实时监控
FLAT Group by 并非替代层级分组,而是补齐了服务端聚合的场景空缺。以下三类业务将直接受益:
- 汇总报表:如电商后台的“按品类查看月度销售额”,用户只关心聚合数值,不需要展开明细。FLAT 模式可瞬间加载数百个分类的数据,且支持实时排序与过滤。
- 实时监控大屏:物联网场景中,设备按区域分组显示总故障数。由于数据每秒都在更新,FLAT 模式避免了对历史子行的维护,使增量刷新更高效。
- 权限受限的数据展示:当业务不允许用户查看明细(如银行只展示分行汇总),FLAT 模式天然隔离了底层数据,符合安全规范。
四、迁移与兼容性:开发者零负担
对于已使用 SSRM 层级分组的项目,升级到 FLAT Group by 几乎零成本:仅需调整网格配置中的 groupDisplayType 并确保后端能响应 groupKeys 参数。AG-Grid 在论坛中明确表示,FLAT 模式与现有的排序、过滤、选择、单元格编辑等功能完全兼容,且支持聚合函数的自定义(例如使用 aggFunc: 'sum' 或自定义聚合函数)。此外,该特性已集成到 AG-Grid 27.2.0 及以上版本的企业版中,社区版用户则可通过 groupUseEntireRow 的变通方式实现近似效果。
五、结语:服务端数据的“扁”与“深”
FLAT Group by 的推出,标志着 AG-Grid 对服务端数据模型的思考进入更细颗粒度阶段。它用“扁平”换取了性能与简洁,用“放弃层级”换来了极致的渲染效率。对于需要海量数据聚合分析的前端应用而言,这一新范式无疑提供了一柄利器。当业务不再需要钻取细节时,FLAT Group by 或许正是你等待已久的那把钥匙。