歌词滚动之为什么transform比top性能更好?

左侧使用子绝父相 不断更新top 属性,而右侧则使用translate 测试60秒播放查看绘制次数 使用top 方式渲染652 次,使用translate 则只绘制了251

js 复制代码
doms.ul.style.top = `-${offset}px`
// vs
doms.ul.style.transform = `translateY(-${offset}px)`

为什么transform比top少绘那么多次?

这和reflowrepaint有关就是俗称的重排与重绘以及浏览器渲染原理有关

reflow

reflow就是当几何信息变动导致的布局树重新计算以及后续的步骤

哪些操作会导致reflow ? 例如修改几何信息width、height、padding、margin、font-size 包括这里说的top

repaint

repaint 的本质就是重新根据分层信息计算了绘制指令(什么是分层?后续会讲)

我们应该知道重排必然引发重绘对吧,所以不断更新top 必然repaint

览器渲染流程

  1. HTML解析 拿到html文本解析包括不限于html css js,产出DOM树与CSSOM树
  2. 样式计算 样式计算产出带有样式的DOM树
  3. 布局 计算每个节点的几何信息
  4. 分层 现代浏览器为提高性能 将内容易变的分为一层
  5. 绘制 主线程为每个层产生单独的绘制指令
  6. 分块 合成线程对每个图层分块划分为更小的区域由多个线程完成
  7. 光栅化 将每个块变成位图优先处理靠近视口的块
  8. 画 用位图生成quad指引标出应该画到屏幕的那个位置,在此阶段考虑transform animation等

注意 :分块阶段开始是在合成线程处理不会阻塞主线程

分层信息可在控制台layer看

因为几何信息的更改重发reflow 导致repaint

transform不影响布局及绘制指令只在合成线程中画的阶段考虑所以性能更优

其他

  • font-size 更改同样触发reflow 可考虑用scale代替
  • 因为画是在合成线程所以主线程阻塞不会影响到animation与滚动条
相关推荐
qq_4198540525 分钟前
空间网格管理器
前端·javascript·html
qingmiaozhuan27 分钟前
电脑录屏没有声音还能补救吗?音频采集链路详解及4种技术方案
前端·电脑·音视频·开发工具·电脑录屏·电脑录屏软件
天若有情67337 分钟前
Dev_Portfolio 个人主页html网页源码分享!!!
前端·html·源码·个人主页
李剑一1 小时前
ant-design-vue 1.x 版本换肤功能开发
前端·vue.js·ant design
京东云开发者1 小时前
【Coding生态】从代码托管到 AI 能力底座:与Coding一起共建 AI 研发生态
前端
guhy fighting2 小时前
x-www-form-urlencoded,form-data,raw 表单请求格式的区别
前端·表单请求格式
李明卫杭州2 小时前
Vue2 与 Vue3 自定义指令详解:钩子变化、迁移指南与实战示例
前端·javascript·vue.js
问商十三载2 小时前
大模型GEO内容更新频率:3个节奏规律提收录权重,零成本提30%引用率附更新计划表
前端·人工智能·机器学习
yingyima2 小时前
sed 命令速查手册:从一次午夜事故说起
前端
七月丶2 小时前
线上出 Bug,你还在让用户"清一下缓存"?我用一个插件让每个请求自报版本
前端·javascript·面试