Skip to content

从输入url到页面呈现 #36

@LumiereXyloto

Description

@LumiereXyloto

网络部分

网络请求

  1. 构建请求(此处只构建了请求行)
  2. 查找强缓存
  3. DNS解析
    • DNS缓存
    • DNS解析
  4. 建立TCP连接
    • 通过三次握手(即总共发送3个数据包确认已经建立连接)建立客户端和服务器之间的连接。
    • 进行数据传输。这里有一个重要的机制,就是接收方接收到数据包后必须要向发送方确认, 如果发送方没有接到这个确认的消息,就判定为数据包丢失,并重新发送该数据包。当然,发送的过程中还有一个优化策略,就是把大的数据包拆成一个个小包,依次传输到接收方,接收方按照这个小包的顺序把它们组装成完整数据包。
    • 断开连接的阶段。数据传输完成,现在要断开连接了,通过四次挥手来断开连接。
  5. 发送HTTP请求
    • 携带请求行、请求头、请求体

网络响应

  1. 得到响应结果
  2. 判断是否断开TCP连接
    • 如果请求头或响应头中包含Connection: Keep-Alive,表示建立了持久连接,这样TCP连接会一直保持,之后请求统一站点的资源会复用这个连接。
    • 否则断开TCP连接, 请求-响应流程结束。

解析算法部分

完成了网络请求和响应,如果响应头中Content-Type的值是text/html,那么接下来就是浏览器的解析和渲染工作了。

构建DOM树

样式计算

  1. 标准化样式表
  2. 标准化样式属性
  3. 计算每个节点的具体样式

生成布局树

渲染过程部分

建图层树

浏览器在构建完布局树之后,还会对特定的节点进行分层,构建一棵图层树(Layer Tree)。去实现3D动画如何呈现出变换效果,当元素含有层叠上下文时如何控制显示和隐藏等等。

生成绘制列表

接下来渲染引擎会将图层的绘制拆分成一个个绘制指令,比如先画背景、再描绘边框......然后将这些指令按顺序组合成一个待绘制列表,相当于给后面的绘制操作做了一波计划。

生成图块和生成位图

显示器显示内容

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions