关于列表性能分析与标准

更多推荐阅读:
 
前端性能&异常分析排查流程-优快云博客

Fullcalendar常用功能介绍-优快云博客


目录

背景

性能优化前置知识

列表真实场景

performace使用工具

关于列表滚动时长的获取

页面操作响应时间

优化评判标准

1.滚动时长标准

2.响应时长标准


背景

为了解决列表卡顿,表格数据量100 * 50为最大数据量的问题,在这里我以多选选人组件为例子,为该组件定义性能差异范围和修改方案。

性能优化前置知识

  • 网络优化
  • 页面渲染优化(首屏加载时间)
  • 页面操作性能优化

在这里主要谈论第三点:页面操作性能优化

关于这方面的优化,最为关键的就是减少重绘和重流

  • 尽量少用table布局,使用table布局的话,每次有单元格布局改变,都会进行整个tabel的回流重绘;
  • 最好别频繁去操作DOM节点,把需要操作的样式,提前写成class,之后需要修改,只需要修改一次,并且直接修改className,做成一次性更新多条css DOM属性,一次回流重绘总比多次回流重绘要付出的成本低得多;
  • 动画实现速度的选择,动画速度越快,回流次数越多,也可以选择使用 requestAnimationFrame;
  • 每次访问DOM的偏移量属性的时候,例如获取一个元素的scrollTop、scrollLeft、scrollWidth、offsetTop、offsetLeft、offsetWidth、offsetHeight之类的属性,浏览器为了保证值的正确也会回流取得最新的值,所以如果你要多次操作,最好取完做个缓存;更加不要通过for循环中访问DOM偏移量属性,而且使用的时候,最好定义一个变量,把要需要的值赋值进去,进行值缓存,把回流重绘的次数减少。

主要核心点就是减少DOM操作和DOM数量。

列表真实场景

我们打开以上连接的列表,会发现卡顿现象比较严重

这个时候使用performace进行分析

performace使用工具

ctrl+e后,在页面中操作一下,然后点击关闭

然后会看到操作过程的性能分析,可以看到有一段一段的红色进度条,出现红色的进度条说明操作过程,是超出长任务(大于50ms)的,一般出现这种是频繁的操作了DOM元素,触发了浏览器的layout,也会是js的宏微任务运行过多导致。

点击任意一个红色的长任务条,选择事件日志

这个时候我们发现这个长任务耗时173.6ms,而这个v-lazy方法就全占满了,当放大图片后可以清晰看到:

这个操作已经强制了浏览器的重排,在得出了一个结论,v-lazy影响我们列表滚动的速度。

接着点击下一个红色任务条:

由于列表是采用虚拟列表的形式,导致内部是动态计算startIndex和endIndex,然后再去更新组件,从而去触发了vue中flushSchedulerQueue异步更新的方法,导致微任务暴增,从而使得长任务变红。在这里我们又得出了一个结论:把现有列表的虚拟滚动给去掉。同时下面还有一个updateStyle的方法,这是列表中更新样式的方法,通过源码解读可以发现,在内部处理了空白区域的高度和top,这个方法是在开启了虚拟滚动才会调用的,所以更加坚定了干掉虚拟滚动的想法。剩下的红色任务条也同理了。

关于列表滚动时长的获取

类似于这样的操作,我一般都是选取红色长任务条的平均值,作为衡量列表滚动的时长。

1109+1102+741 / 3 = 984ms

页面操作响应时间

同理,对页面的操作进行录屏,由于是点击复选框的操作,会有一个click到change的过程

当我们点击编辑,详情按钮

这个时候能得出响应时间为103.34ms

优化评判标准

以人员多选为例子。

1.滚动时长标准

  • 理想状态,无红色长任务条
  • 红色任务条中scroll事件整齐、平整出现,不出现一长一短的情况,时长控制在0-500ms之间

时长通用标准

  • 0-16ms 用户感知很流畅
  • 0-100ms 用户感知基本流畅
  • 100-1000ms 用户会感觉到网站上有一些加载任务
  • 1000ms及更多 用户会失去耐心
  • 10000ms及更多 用户基本会直接离开,不会再访问了

2.响应时长标准

  • 和滚动标准一致

作者:道一云低代码

作者想说:喜欢本文请点点关注~

更多资料分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道一云黑板报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值