一、HTML怎么加载
在页面加载时,浏览器把获取到的HTML代码解析成1个DOM树,DOM树里包含了所有HTML
标签,包括display:none隐藏,还有用JS动态添加的元素等。
浏览器把所有样式(用户定义的CSS和用户代理)解析成样式结构体。
DOM Tree 和样式结构体组合后构建render tree, render tree类似于DOM tree,但区别很
大,因为render tree能识别样式,render tree中每个NODE都有自己的style,而且render tree不
包含隐藏的节点(比如display:none的节点,还有head节点),因为这些节点不会用于呈现,而且
不会影响呈现的,所以就不会包含到 render tree中。简单说就是DOM Tree和我们写的CSS结合
在一起之后,渲染出了render tree。
二、回流
回流(reflow):当render tree中的元素的宽高、布局、显示、隐藏或元素内部文字结结构
发生改变时,会影响自身及其父元素、甚至追溯到更多的祖先元素发生改变,则会导致元素内部、
周围甚至整个页面的重新渲染,页面发生重构,回流就产生了。
三、重绘
重绘(repaint):元素的结构(宽高、布局、显示隐藏、内部文字大小)未发生改变,只是
元素的外观样式发生改变,比如背景颜色、内部文字颜色、边框颜色等。此时会引起浏览器重绘,
显然重绘的速度快于回流。
四、区别
回流必将引起重绘,而重绘不一定会引起回流。例如:只有颜色改变的时候就只会发生重绘
而不会引起回流。
当页面布局和几何属性改变时就需要回流。例如:添加或者删除可见的DOM元素,元素位置
改变,元素尺寸改变——边距、填充、边框、宽度和高度,内容改变。
每个页面至少需要一次回流,就是在页面第一次加载的时候,这时就是回流,因为要构建
render tree。在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染
树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,这就是重绘。
459

被折叠的 条评论
为什么被折叠?



