关于element的table优化问题

来源:2-2 安装 Typescript 文档

有没有没被占用的昵称

2022-02-09

老师,我最近在做一个功能,需求大致是这样的
1.后端同事返回给我一整个数据表的字段,不分页,可能有上百条记录。
2.数据格式如下图,除了fieldCode字段名之外,其他字段用户都可以进行编辑。

图片描述

于是,页面就变成了这样,字段的取值包含了单选、多选、级联、switch还有input

图片描述

接下来给老师诉说一下我的的优化之路
1.最开始是直接全部渲染出来,这个时候性能问题非常明显,比如说点选一个checkbox,select点击选中一个选项,都要经过几秒钟的事件页面才会响应结果。
我通过观察performance,主要的时间是花在了scriping上,加上自己调试,基本上得出结论是element的table的渲染问题。
2.第二次我选择了通过下拉渲染的策略,但是问题又出现了,起初用户没有向下滑动,table的数据可能只有十几条,性能方面不存在明显问题,但是到滚动条滑动到底部,数据全部都渲染完了,问题就又出现了。
3.第三次我选择了通过proxy来代理整个list,从而实现一个虚拟分页,性能有了很大的改观,但是其实反应慢半拍可以察觉的出来的。

请问老师,这个问题我应该怎样解决呀。
我们的table组件是在element的基础上扩展的,代码基本一致
我自己通过文章(https://juejin.cn/post/7007252464726458399)进行了优化
主要模仿了他的更新渲染优化,但是性能提升看不太出来
接下来他的v-memo缓存策略的话,他是判断某一个row是否选中改变,但是我的row基本上每个字段都可能改变,不可能一个个去比对,所以这个策略应该不适合我当前的业务场景。
所以老师,还有什么办法呀

写回答

1回答

张轩

2022-02-10

同学你好 

由于没有特别多的时间去直接看代码和运行 我简单说一下

这个是一个标准的大表格的问题,原因就是 element-table 的性能问题(其实也不算,因为 element-table 就不是为大表格所设计的),我觉得你的调试过程已经很清晰的表明了你的思路了。

我的解决方案:

1 换成分页渲染,不要一次全部渲染,不要下拉加载。

2 使用支持 virtualized 的表格,这是一个渲染大数据的时候的常用做法,只渲染目前在可见的数据,react 的实现,https://bvaughn.github.io/react-virtualized/#/components/List

element-plus 目前没有 virtualized-table,但是它在开发中,已经有了 virtulized-select,https://element-plus.gitee.io/zh-CN/component/select-v2.html 以后应该会有对应的 table 组件。

ant-design-vue 有类似的实现:https://2x.antdv.com/components/table#components-table-demo-big-data

它底层使用的是 surely vue,可以尝试一下:https://www.surely.cool/

0
4
有没有没被占用的昵称
回复
张轩
我也发现了,谢谢老师
2022-02-10
共4条回复

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3142 学习 · 2313 问题

查看课程