最近公司需要使用vue重构以前的项目,为了节省时间快速开发选择了使用element
不得不说,咋一看element的功能很全面样式,该有的都用,但是我们的项目对性能要求比较高,特别是表格
开发过程比较顺利各功能实现都很不难,但是性能测试确成了问题,分页的情况下单页100条就不怎么流畅了,更别说要求不分页5000条,直接加载过程中内存爆掉卡死了,于是开始了分析源码的路;
找到element/packages/table/src表格的代码都在这里
入口是table.vue 我们要看的是具体数据生成部分 看名字就知道是table-body.js
点进去一看,你基本就知道性能慢是个什么情况了,整体使用vue的render方法生成整个界面,整个table部分
render(h) { | |
const columnsHidden = this.columns.map((column, index) => this.isColumnHidden(index)); | |
return ( | |
<table | |
class="el-table__body" | |
cellspacing="0" | |
cellpadding="0" | |
border="0"> | |
<colgroup> | |
{ | |
this._l(this.columns, column => <col name={ column.id } />) | |
} | |
</colgroup> | |
<tbody> | |
{ | |
this._l(this.data, (row, $index) => | |
[<tr | |
style={ this.rowStyle ? this.getRowStyle(row, $index) : null } | |
key={ this.table.rowKey ? this.getKeyOfRow(row, $index) : $index } | |
on-dblclick={ ($event) => this.handleDoubleClick($event, row) } | |
on-click={ ($event) => this.handleClick($event, row) } | |
on-contextmenu |