图层与重绘重排与优化《性能优化第三篇》(1)

  1. 获取DOM后分割为多个图层

  2. 对每个图层的节点计算样式结果 (Recalculate style—样式重计算)

  3. 为每个节点生成图形和位置 (layout–布局,重排,回流)

  4. 将每个节点绘制填充到图层位图中 (Paint—重绘)

  5. 图层作为纹理上传至GPU

  6. 组合多个图层到页面上生成最终屏幕图像 (Composite Layers – 图层重组)

图层创建的条件:

=======================================================================

  1. 拥有具有3D变换的CSS属性

  2. 使用加速视频解码的<video>节点

  3. <canvas>节点

  4. CSS3动画的节点

  5. 拥有CSS加速属性的元素(will-change)

重绘(Repaint):

===========================================================================

  • 外观变化,位置没变,不会重新布局,不一定伴随重排

  • 重绘是以图层为单位,如果图层中某个元素需要重绘,那么整个图层都需要重绘,所以为了性能,应该让“变化的东西”拥有一个自己的图层

重排(Reflow,也称回流):


  • 渲染对象在创建完成并添加到渲染树时,并不包含位置和大小信息。计算这些值的过程称为布局或重排,大多数会(基本一定)导致重绘

  • Resize窗口的时候产生重排(移动端没有这个问题,因为移动端的缩放没有影响布局视口)

优化方案:#


减少浏览器运行所需要做得工作

  1. 元素位置移动变换时尽量使用CSS3的transform来代替top、left等操作,变换(transform)和透明度(opacity)的改变仅仅影响图层的组合

  2. 使用opacity来代替visibility(现在版本的浏览器不一定准

  • 使用visibility不触发重排,但是依然重绘

  • 直接使用opacity即触发重绘,又触发重排(GPU底层设计)

  • opacity配合图层使用,既不触发重绘也不触发重排

原因:

透明度的改变时候,GPU在绘画时只是简单的降低之前已经画好的纹理的alpha值来达到效果,并不需要整体的重绘。

不过这个前提是这个被修改opacity本身必须是一个图层

  1. 不要使用table布局

table-cell

  1. 将多次改变样式属性的操作合并成一次操作

不要一条一条地修改DOM的样式,预先定义好class,然后修改DOM的className

  1. 将DOM离线后再需改

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

最后

如果你已经下定决心要转行做编程行业,在最开始的时候就要对自己的学习有一个基本的规划,还要对这个行业的技术需求有一个基本的了解。有一个已就业为目的的学习目标,然后为之努力,坚持到底。如果你有幸看到这篇文章,希望对你有所帮助,祝你转行成功。

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

本的规划,还要对这个行业的技术需求有一个基本的了解。有一个已就业为目的的学习目标,然后为之努力,坚持到底。如果你有幸看到这篇文章,希望对你有所帮助,祝你转行成功。

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值