前端表格性能优化

最近项目面临一个表格性能问题,挺有意思的,这里记录下优化方案

业务需求

  • 表格要无限滚动,不要有分页
  • 表格列多且显示丰富,比如存在可编辑单元格,tooltip,弹窗等
  • 表格行数较多,最大可达1000行,当前业务数据上看最多只有500行,但考虑长远最大需要支持到1000

目前效果

  • 100行时已出现明显卡顿,滚动不流畅

解决方案

经过分析,决定采用虚拟列表技术来解决该问题,原理即是根据滚动按需渲染视窗内表格行数据。

  • 当前组件采用的是Antd@v3,查看ChangeLog发现v4已提供了虚拟列表支持,但因此整体升级UI库动力不大,且v4提供的使用方法还是较为啰嗦,因此自行改造解决。

  • 参考库virtualized-table-for-antd

性能对比分析

以一个401行数据的性能表现对比。

性能检测工具:Chrome Developer Performance

优化前

优化后

除此之外

可以采用虚拟列表后,效果还是明显好的,但对于当前我的系统而言,还是较为卡顿。

原因是表格本身单元格内DOM元素过于庞杂,比如单元格内容中的冗余DOM标签,比如一些模态弹窗等走全局公共的,而非每个单元格一个等等,这些地方也需要优化,这里不再赘述。

写在最后

  • 虚拟列表针对这种业务形态可以很好的优化表格性能,但凡事也有利有弊,比如极限条件下,用户滚动极快,高度就可能会有问题,元素本身也可能会出现卡顿,因为需要快速的读写DOM。
  • 针对WEB性能分析工具,Chrome Developer中的Performance工具搭配技术框架配套插件如React Developer Tools足矣。

参考文档