一.网页的生成过程
网页的生成过程,大致可以分成五步。
- HTML代码转化成DOM
- CSS代码转化成CSSOM(CSS Object Model)
- 结合DOM和CSSOM,生成一棵渲染树(包含每个节点的视觉信息)
- 生成布局(layout),即将所有渲染树的所有节点进行平面合成
- 将布局绘制(paint)在屏幕上
这五步里面,第一步到第三步都非常快,耗时的是第四步和第五步。
"生成布局"(flow)和"绘制"(paint)这两步,合称为"渲染"(render)。
二、重排和重绘
网页生成的时候,至少会渲染一次。用户访问的过程中,还会不断重新渲染,重新渲染又分为重排和重绘。
重排(reflow):即重新生成布局,重排必然导致重绘,如元素位置的改变,就会触发重排和重绘。
重绘(repaint):即重新绘制,需要注意的是,重绘不一定需要重排
,比如改变某个元素的颜色,就只会触发重绘,而不会触发重排。
以下三种情况,会导致网页重新渲染。
- 修改DOM
- 修改样式表
- 用户事件(比如鼠标悬停、页面滚动、输入框键入文字、改变窗口大小等等)
页面的重排非常耗费资源,是导致网页性能低下的根本原因,所以我们在编写代码时应尽量避免重排。