高频面试之《重绘和回流》

简介: 高频面试之《重绘和回流》

什么是重绘和回流?

重绘: 当页面中元素样式的改变并不影响它在文档流中的位置时,也就是说布局没有发生改变时(比如只是改变元素的颜色)。


回流: 当渲染树(Render Tree)中的部分(或全部)元素的尺寸、结构、显示隐藏等发生改变时,浏览器重新渲染的过程称为回流。


注意:


回流必定会发生重绘,重绘不一定会引发回流。


回流比重绘的代价要更高。有时即使仅仅回流一个单一的元素,它的父元素以及任何跟它相关的元素也会产生回流,牵一发动全身。


引起回流的因素?

(1)添加或者删除可见的 DOM 元素(不可见元素不会触发回流);

(2)元素尺寸或位置发生改变

(3)元素内容变化,比如文字数量或图片大小

(4)浏览器窗口大小发生改变

(5)CSS伪类的激活(例如::hover,从而改变了元素的布局的)

如何减少重绘和回流?

CSS


使用transform代替top; 使用visibility代替display:none,前者引起重绘,后者引发回流;

避免使用table布局; 尽可能在DOM树最末端改变class; 避免设置多层内联样式,css选择符从右往左匹配查找,避免节点层级过多;

将动画效果应用到position属性为absolute或fixed的元素上,避免影响其他元素的布局; 避免使用css表达式,可能会引发回流;

css硬件加速;


JavaScript


避免频繁操作样式,修改class最好; 避免频繁操作DOM,合并多次修改为一次; 避免频繁读取会引发回流/重绘的属性,将结果缓存;

对具有复杂动画的元素使用绝对定位,使他脱离文档流。


相关文章
|
8月前
|
缓存 前端开发 JavaScript
|
2月前
|
缓存 JavaScript 前端开发
减少回流和重绘的发生
【10月更文挑战第24天】通过综合运用这些方法,可以有效地减少回流和重绘的发生,提高页面的性能和响应速度,为用户带来更好的体验。
|
2月前
|
缓存 JavaScript 前端开发
理解回流跟重绘
【10月更文挑战第24天】回流和重绘是网页渲染过程中的重要概念,它们相互关联又各自具有不同的特点和影响。通过深入了解它们,我们可以更好地掌握页面性能优化的关键,为用户提供更加优质的浏览体验。
|
2月前
|
存储 缓存 JavaScript
利用缓存布局信息来减少回流和重绘的发生
【10月更文挑战第24天】通过合理利用缓存布局信息,我们可以在一定程度上降低回流和重绘的发生频率,提高页面的性能和用户体验。这是前端性能优化中的一个重要环节,需要我们在实践中不断探索和总结经验,以找到最适合的解决方案。
|
8月前
|
缓存 JavaScript 前端开发
掌握重排和重绘,让你的网页飞得更高!
掌握重排和重绘,让你的网页飞得更高!
|
8月前
|
缓存 JavaScript 前端开发
< 性能提升 Get √ :如何理解 “ 回流 ” 与 “ 重绘 ” ?如何合理的减少其出现呢 ? >
`回流` 和 `重绘` 可以说是每一个web前端开发者经常听到的两个名词,虽然听的多,但是我们真的都理解它们的意思了嘛? 很显然都迷迷糊糊,当然在之前没有去了解的时候,小温也不例外! 之前是介于之前公司要分享,所以当时有做了解,所以这次打算和大伙分享一下! > 🧐 预先剧透一下: " **`回流`** " 和 “ **`重绘`** ” 是阻碍浏览器渲染 及 服务性能的关键因素中 比较重要的两点, 合理的规避它们,能够有效的提高项目的性能!
< 性能提升 Get √ :如何理解 “ 回流 ” 与 “ 重绘 ” ?如何合理的减少其出现呢 ? >
|
前端开发 JavaScript
前端性能优化—回流与重绘
前端性能优化—回流与重绘
|
Web App开发 缓存 JavaScript
回流和重构
回流和重构
97 0
|
缓存 前端开发 JavaScript
重绘与重排(回流)
重绘与重排(回流)
107 0
|
缓存 JavaScript 前端开发
【怎么理解回流与重绘?以及触发场景】
【怎么理解回流与重绘?以及触发场景】
176 0