网络部分
网络请求
- 构建请求(此处只构建了请求行)
- 查找强缓存
- DNS解析
- 建立TCP连接
- 通过三次握手(即总共发送3个数据包确认已经建立连接)建立客户端和服务器之间的连接。
- 进行数据传输。这里有一个重要的机制,就是接收方接收到数据包后必须要向发送方确认, 如果发送方没有接到这个确认的消息,就判定为数据包丢失,并重新发送该数据包。当然,发送的过程中还有一个优化策略,就是把大的数据包拆成一个个小包,依次传输到接收方,接收方按照这个小包的顺序把它们组装成完整数据包。
- 断开连接的阶段。数据传输完成,现在要断开连接了,通过四次挥手来断开连接。
- 发送HTTP请求
网络响应
- 得到响应结果
- 判断是否断开TCP连接
- 如果请求头或响应头中包含Connection: Keep-Alive,表示建立了持久连接,这样TCP连接会一直保持,之后请求统一站点的资源会复用这个连接。
- 否则断开TCP连接, 请求-响应流程结束。
解析算法部分
完成了网络请求和响应,如果响应头中Content-Type的值是text/html,那么接下来就是浏览器的解析和渲染工作了。
构建DOM树
样式计算
- 标准化样式表
- 标准化样式属性
- 计算每个节点的具体样式
生成布局树
渲染过程部分
建图层树
浏览器在构建完布局树之后,还会对特定的节点进行分层,构建一棵图层树(Layer Tree)。去实现3D动画如何呈现出变换效果,当元素含有层叠上下文时如何控制显示和隐藏等等。
生成绘制列表
接下来渲染引擎会将图层的绘制拆分成一个个绘制指令,比如先画背景、再描绘边框......然后将这些指令按顺序组合成一个待绘制列表,相当于给后面的绘制操作做了一波计划。
生成图块和生成位图
显示器显示内容
网络部分
网络请求
网络响应
解析算法部分
完成了网络请求和响应,如果响应头中Content-Type的值是text/html,那么接下来就是浏览器的解析和渲染工作了。
构建DOM树
样式计算
生成布局树
渲染过程部分
建图层树
浏览器在构建完布局树之后,还会对特定的节点进行分层,构建一棵图层树(Layer Tree)。去实现3D动画如何呈现出变换效果,当元素含有层叠上下文时如何控制显示和隐藏等等。
生成绘制列表
接下来渲染引擎会将图层的绘制拆分成一个个绘制指令,比如先画背景、再描绘边框......然后将这些指令按顺序组合成一个待绘制列表,相当于给后面的绘制操作做了一波计划。
生成图块和生成位图
显示器显示内容