篇幅有限,本文只记录优化策略,对于优化的效果不另做证明
针对使用 antd 的 ProTable
组件的页面进行优化,主要方案如下
- 减少 State
检查代码行文逻辑,尤其是 request 中的清理或重置状态的逻辑
可以使用 if 减少无意义的 setState
使用
setEditableKeys(ids)
替代action?.startEditable(id)
利用缓存减少数据处理过程(空间换时间)
使用 useRef 存储数据处理结果,作为后续处理过程的参考或者恢复时的备份
尽可能将多个需求的数据处理过程合并,减少时间复杂度
虚拟滚动
使用
useMemo
处理tableComponents
当需要重写 table 的组件例如 cell 或者 body 时,可以使用 useMemo 缓存这个组件,减少不必要的计算与更新
使用 useCallback 缓存复杂回调函数,对于作为回调函数传入 memo 组件的函数,非常好用
columns
配置中适当添加shouldCellUpdate
说实话,以上的方案对于页面性能提升非常有限。最后还是使用 table 重写了可编辑表格组件,弃用了 EditableProTable 组件,性能才得到了显著提升。。。