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

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

什么是重绘和回流?

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


回流: 当渲染树(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,合并多次修改为一次; 避免频繁读取会引发回流/重绘的属性,将结果缓存;

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


相关文章
|
JavaScript
|
资源调度 双11 UED
平行云助力“天猫X网易云音乐”两大IP,打造爆款元宇宙云派对
2022年,天猫与网易云音乐联手打造了一场元宇宙“云派对”,通过3D互联网技术,以游戏+演唱会的形式吸引上万名用户参与。平行云LarkXR提供实时云渲染技术支持,解决高并发和互动数据沉淀难题,实现万人同频互动,带来沉浸式购物、游戏、音乐体验,助力品牌长效增长。
315 11
|
机器学习/深度学习 存储 算法
【博士每天一篇文献-综述】Continual lifelong learning with neural networks_ A review
这篇综述论文深入探讨了神经网络在终身学习领域的研究进展,包括生物学启发的概念、终身学习方法的分类与评估,以及未来研究方向,旨在解决神经网络在学习新任务时如何避免灾难性遗忘的问题。
361 2
|
人工智能
Suno教程篇:音乐小白也能使用Suno AI零门槛创作音乐?从此只听AI写的歌!
本文是一篇Suno AI音乐创作工具的教程,指导音乐小白如何使用Suno AI零门槛创作音乐,包括准备工作、基础使用、歌曲风格的选择、歌词填入技巧,以及通过实例展示如何为不同场景生成背景音乐。
Suno教程篇:音乐小白也能使用Suno AI零门槛创作音乐?从此只听AI写的歌!
|
JavaScript 前端开发 UED
为什么在 Vue3.0 采用了 Proxy,抛弃了 Object.defineProperty
Vue 3.0 采用 Proxy 替代 Object.defineProperty,主要因为 Proxy 提供了更全面、高效的数据拦截能力,支持对更多操作进行拦截和自定义处理,同时减少了对对象的限制,提升了框架性能和开发体验。
|
人工智能 自然语言处理 数据库
RAG 技术:让 AI 从 “书呆子” 变身 “开卷小天才”!
鳄叔介绍了RAG(检索增强生成)技术,这是一种让AI既能查资料又能灵活作答的方法,如同“开卷考试”的学霸。RAG结合了检索能力和生成能力,使AI能够实时获取最新信息,提供更专业、精准的回答,广泛应用于企业客服、法律咨询、医疗诊断和教育等领域。
416 0
|
JavaScript 前端开发 数据管理
React和Vue的优缺点
【10月更文挑战第23天】React和Vue的优缺点
426 0
|
API
Vue3组件通信全解析:利用props、emit、provide/inject跨层级传递数据,expose与ref实现父子组件方法调用
Vue3组件通信全解析:利用props、emit、provide/inject跨层级传递数据,expose与ref实现父子组件方法调用
3871 0
|
机器学习/深度学习 数据挖掘 Python
【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 问题二 时间突变分析 Python实现
第十届“泰迪杯”数据挖掘挑战赛B题中对电力系统负荷预测分析进行时间突变分析的Python实现方法,包括定义绘图函数、应用阈值查找异常值、手动设置阈值、使用分位数和3Sigma原则(IQR)设定阈值,以及根据分位数找到时间突变的步骤,并提供了完整代码的下载链接。
369 0
|
安全 Java
【JAVA】线程的run()和start()有什么区别?
【JAVA】线程的run()和start()有什么区别?