美文网首页让前端飞前端开发笔记前端面试
页面重绘(repaint)和回流(reflow)

页面重绘(repaint)和回流(reflow)

作者: a333661d6d6e | 来源:发表于2018-10-29 17:48 被阅读3次

前言

页面重绘(repaint)和回流(reflow)

页面显示到浏览器上的过程:

1.1、生成一个DOM树。

浏览器将获取到的HTML代码解析成1个DOM树,包含了所有标签,包括display:none和动态添加的节点。

1.2、生成样式结构体。

浏览器将所有样式解析成样式结构体,解析过程中会去掉浏览器不能识别的。

2、DOM树和样式结构体结合生成render树。

render树类似于DOM树,render树每个节点有自己样式(盒子模型,margin、border、padding、content),但不包含display:none和head节点,却包含visibility:hidden节点。

3、浏览器根据render树渲染页面。

重绘(repaint)和回流(reflow)

回流:当render tree中的一部分(或全部)因为元素的尺寸,布局,隐藏等改变而需要重新构建,就是回流。回流后会进行重绘。

重绘:当只是元素的外观,风格变化,不影响布局的,重新渲染的过程就叫重绘。

PS:这样重绘的代价会比回流小。

什么时候出现回流?

1、页面渲染初始化

2、添加、删除可见的DOM元素

3、元素尺寸、位置变化

4、窗口resize

欢迎加入全栈开发交流群一起学习交流:864305860
浏览器对回流、重绘优化

浏览器都会优化重绘和回流的操作。浏览器会把所有会引起回流、重绘的操作放入1个队列中,等队列中的操作到了一定的数量或者到了一定的时间间隔,浏览器就会flush队列,进行一个批处理。这样就会让多次的回流、重绘变成一次回流重绘。

另外,当我们取一些属性值时,类似offsetWidth、clientWidth、width等,会导致浏览器提前flush队列,只为了取到正确的值,即便是队列里的操作不影响所取的值。

减少回流、重绘

1、修改样式和添加DOM元素时,批量处理。

2、取offsetWidth等属性值,缓存到变量,少去取值。

3、将元素脱离文档流。

PS:第3点我并未查找到相关证据,持保留态度。
了解更多

相关文章

  • css中的repaint和reflow

    页面设计中,不可避免的存在浏览器重绘repaint和回流reflow 介绍 repaint:针对某个元素进行重绘。...

  • 前端总结(后续继续更新)

    1,reflow和repaint:回流和重绘。回流:renderTree 重建。重绘:外观样式风格进行更新。(co...

  • 前端一些细节

    1,reflow和repaint:回流和重绘。回流:renderTree 重建。重绘:外观样式风格进行更新。(co...

  • 浏览器的渲染机制

    reflow(回流) 和 repaint(重绘):http://blog.csdn.net/ClaireKe/ar...

  • 页面重绘(repaint)和回流(reflow)

    前言 页面显示到浏览器上的过程: 1.1、生成一个DOM树。 浏览器将获取到的HTML代码解析成1个DOM树,包含...

  • 浏览器原理

    介绍下重绘和回流(Repaint & & Reflow ),以及如何进行优化 参考文档: https://mp.w...

  • reflow小结

    整个在浏览器的渲染过程中最重要的性能损失就在reflow(回流)和repaint(重绘) ,尤其是手机页面。因此我...

  • 浏览器的回流与重绘 (Reflow & Repaint)

    浏览器的回流与重绘 (Reflow & Repaint) 写在前面 在讨论回流与重绘之前,我们要知道: 浏览器使用...

  • 页面回流

    理解浏览器的重绘与回流(repaint&&reflow) 今天在做练习的时候,遇到了重绘与回流这个词,表示连个毛都...

  • ★ 重绘和回流 ( Repaint & Reflow )

    概念区别 重绘:Repaint 当 render tree 中的一些元素需要更新属性,这些属性只影响元素的外观、风...

网友评论

    本文标题:页面重绘(repaint)和回流(reflow)

    本文链接:https://www.haomeiwen.com/subject/rffitqtx.html