element-UI(v2.4.9)table性能问题浅谈

最近在浏览项目时无意中发现负责的模块在滚动时会出现些许卡顿。

通过chromeperformance工具进行对比测试发现:

  1. 鼠标放在滚动条上,即不再页面之内时,用滚轮进行滚动,无明显异常;
  2. 鼠标放在table组件上时,用滚轮滚动,感觉到了卡顿,见下图;
    performance

从上图可以发现,在某些时间段内帧数极低,同时火焰图上可以发现于此同时在执行mouseenter事件的函数,综上推测源头应该是鼠标移动的相关事件,这个鼠标事件本身耗时不多,但是触发了VueupdateComponent

同时使用Vue官方插件,它在新版同样提供了性能测试功能:

Component render

Frames per second

可以注意到,ElTableColumnupdateRender触发了非常多次,虽然每次时间不长,但是集合起来很多。
同时cell-mouse-enter在一秒内触发多次。


打开v2.4.9的element-UI源代码,找到了ElemeFE/element/v2.4.9/packages/table/src/table-body.js这个文件,里面赫然写着

...
handleCellMouseEnter(event, row) {
        ...
        const tooltip = this.$refs.tooltip;
        // TODO 会引起整个 Table 的重新渲染,需要优化
        this.tooltipContent = cell.innerText || cell.textContent;
        tooltip.referenceElm = cell;
        ...
}
...

相关的issue,我推测是由于饿了么框架在鼠标滑过单元格时,为了显示tooltips,触发了数据更新,特别是在表格中有计算的值会导致页面更慢。

解决方案:

  1. 升级elementui到v2.6.0以上的版本;
  2. 不在表格中使用计算的属性用来展示可缓解问题;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 8,864评论 1 11
  • 本节介绍各种常见的浏览器事件。 鼠标事件 鼠标事件指与鼠标相关的事件,主要有以下一些。 click 事件,dblc...
    许先生__阅读 7,263评论 0 4
  • Dom事件 事件是一种异步编程的实现方式,本质上是程序各个组成部分之间的通信。DOM支持大量的事件 (一) Eve...
    woow_wu7阅读 5,754评论 0 1
  • 基于Vue的一些资料 内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 element★...
    尝了又尝阅读 4,876评论 0 1
  • UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组...
    鲁大师666阅读 43,539评论 5 97