浏览器主要组成
浏览器是多进程的,一个页面从请求到渲染,是多个进程在同时进行,这些进程主要由如下的组件产生。css
浏览器主要组成:html
- 用户界面(The user interface)
- 浏览器引擎(The browser engine)
- 渲染引擎(The rendering engine)
- 网络(Networking)
- UI 后端绘制(UI backend)
- js 解析器(JavaScript interpreter)
- 数据存储(Data storage)

渲染引擎
渲染引擎主要渲染 html 、css 、图片 等内容。不一样浏览器的渲染机制有差别。html5
渲染步骤
浏览器渲染网页的过程,主要有如下几个步骤web
- 解析HTML,生成 DOM 树
- 构建 DOM 树:此时只有形状和颜色等属性
- 渲染树结构:给每一个节点都加上坐标,构成显示布局
- 绘制树:给节点加上 UI 样式,进行绘制显示

下图是 webkit 内核(chrome) 的渲染流程:chrome

重绘和重排
- 重绘:当元素外观的改变时触发。如改变vidibility、outline、背景色等属性。
- 重排/回流:当元素的位置和几何信息改变时触发。如改变窗口大小、元素的width、height、position 等。
重排处于layout阶段、重绘处于paint阶段,越往前损耗越高,因此重排会比重绘要消耗性能。segmentfault
注意:重排必定会触发重绘,而重绘不必定会重排。
后端
重绘(repaint)
1. 致使 repaint 的操做:
- 全部改变元素外观的操做:color、background、box-shadow 等。
2. 常见的引发 repaint 的元素
常见 repaint 元素 |
|
|
|
color |
border-style |
visibility |
background |
text-decoration |
background-image |
background-position |
background-repeat |
outline-color |
outline |
outline-style |
border-radius |
outline-width |
box-shadow |
background-size |
|
重排/回流(reflow)
一、致使 reflow 的操做:
- 改变窗口大小
- 改变文字大小
- 添加/删除样式表
- 内容的改变,(用户在输入框中写入内容也会)
- 激活伪类,如:hover
- 操做class属性
- 脚本操做DOM
- 计算offsetWidth和offsetHeight
- 设置style属性
- ...
二、常见的引发的 reflow 元素
常见 reflow 元素 |
|
|
|
width |
height |
padding |
margin |
display |
border-width |
border |
top |
position |
font-size |
float |
text-align |
font-family |
line-height |
vertical-align |
right |
clear |
white-space |
bottom |
min-height |
三、如何减小重排?
- 不要一条一条地修改 DOM 的样式,预先定义好 class,而后修改 DOM 的 className
- 把 DOM 离线后修改,好比:先把 DOM 给 display:none (有一次 Reflow),而后你修改100次,而后再把它显示出来
- 不要把 DOM 结点的属性值放在一个循环里当成循环里的变量
- 尽量不要修改影响范围比较大的 DOM
- 为动画的元素使用绝对定位 absolute / fixed
- 不要使用 table 布局,可能很小的一个小改动会形成整个 table 的从新布局
参考文章:浏览器