回流(重排)和重绘画
是什么?
浏览器解析的DOM树和CSSOM树,接着对DOM树进行遍历,拿到DOM节点,然后再从CSSDOM树中拿到相应节点的样式,最后生成渲染树。
回流:渲染树生成之后,每个节点元素的具体位置、大小的计算,然后渲染在浏览器,这个过程就叫回流
重绘:每个节点元素的像素点渲染在浏览器的过程就叫重绘(如背景色)
什么情况下会造成回流和重绘?
①:修改DOM元素的位置、大小,浏览器要重新遍历计算DOM元素,会造成回流(重排)
②:修改DOM元素的背景色、字体颜色等操作会引起重绘
PS : 重绘不一定会引起回流,但回流一定会引起重绘
如何优化?
1、浏览器:因为每次的回流和重绘会造成浏览器开销巨大,浏览器层面上就做了一些优化措施,它不会每次都把涉及回流、重绘的操作执行一次,而是把这些操作放入一个列队里,在列队排满后或者一段时间后一次执行,大大减少了浏览器开销,但是如果在代码执行的过程中,有JS请求APIA获取元素的位置时,列队会被强制刷新,如下API:offsetLeft、offsetTop、offsetWidth, offsetHeight, clientWidth, clientHeigth,clientLeft,clientTop,scrollWidth, scrollHeight, scrollLeft, scrollTop等。
2、尽量减少重绘、回流操作:如使用visible、opcity代替display
3、脱离文档流:如遇到复杂动画的时候,可以把动画所在的盒子绝对定位,让其脱离父级文档流,不影响父级和后面元素
4、css3硬件加速:使用transform、opcity、filter(图片黑白)触发硬件加速
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端