返回

表格多选性能优化实践,一秒可处理万条数据

前端

起因
公司基础组件库基于 ElementUI 进行二次封装。某天有个前端跟我反馈,表格组件在渲染 500 条数据的情况下,多选功能的全选会变得特别卡,点一下要卡 10 几秒。我想应该不至于啊,500 条数据对于现在的计算机来说,处理起来应该不至于这么慢。

于是,我开始着手分析表格多选性能的瓶颈。

定位问题

首先,我通过 Chrome 开发者工具的 Performance 面板,对表格多选操作进行了性能分析。发现操作表格多选时,会触发大量的 DOM 操作,包括创建、更新和删除元素。而这些 DOM 操作会消耗大量的 CPU 资源,导致页面卡顿。

于是,我决定优化这些 DOM 操作。

优化方案

  1. 优化数据结构

首先,我将表格数据存储在一个数组中,而不是一个对象中。因为数组的访问速度比对象快。

// 之前的数据结构
const data = {
  id: 1,
  name: 'John Doe',
  age: 20
};

// 优化后的数据结构
const data = [
  [1, 'John Doe', 20],
  [2, 'Jane Doe', 21],
  [3, 'Peter Parker', 22]
];
  1. 优化算法

接下来,我优化了全选操作的算法。我使用位运算来代替循环,这样可以大大减少计算量。

// 之前的算法
for (let i = 0; i < data.length; i++) {
  data[i].selected = true;
}

// 优化后的算法
data.forEach((item) => {
  item[0] |= 1;
});
  1. 优化 DOM 操作

最后,我优化了 DOM 操作。我使用 ElementUI 的批量更新功能,将多个 DOM 操作合并成一次更新。

// 之前的 DOM 操作
for (let i = 0; i < data.length; i++) {
  document.getElementById('checkbox-' + data[i].id).checked = true;
}

// 优化后的 DOM 操作
ElementUI.nextTick(() => {
  data.forEach((item) => {
    document.getElementById('checkbox-' + item.id).checked = true;
  });
});

优化效果

经过这些优化,表格多选性能得到了极大的提升。现在,表格即使渲染 10,000 条数据,全选操作也可以在 1 秒内完成。优化后效果显著,极大地提升了用户体验。

总结

通过优化数据结构、算法和 DOM 操作,我们可以极大地提升表格多选性能。这些优化技巧可以应用到其他需要处理大量数据的场景中,以提高网页的性能。