图解浏览器渲染过程

大家好,我是辉夜真是太可爱啦 。故事的开始,要从一道经典的面试题开始说起, 从输入 URL 到页面加载完成,发生了什么? 相信大家应该对这个题目也很耳熟了。本系列是我 《一文搞懂JS系列》 之后的第二个系列。旨在让大家搞懂这个加载过程,从简答以及深入解答都能够对答如流

前言

大家好,我是辉夜真是太可爱啦

在通过三次握手,建立 TCP 连接,通过 HTTP 请求获取网络资源之后,会先拿到 HTML 文件,HTML是一个页面的基础,所以会在最开始的时候下载它,下载完毕后就开始对它进行解析。而解析完成之后,渲染引擎承载着把静态资源转换为可视化界面的任务。

f08cc8f1d4b547759b002dbc9230ecb3_tplv-k3u1fbpfcp-watermark.png

主要渲染过程

主要有五个渲染过程:

4e9c3496783f46b79d3a274e8e044a8b_tplv-k3u1fbpfcp-watermark.png

在这五个过程中,每一个过程都有相应产物

1. 构建DOM树

对 HTML 文档自上而下进行解析,并在解析 HTML 的过程中发出了页面渲染所需的各种外部资源请求。

其实这一步,外部资源请求远远没有那么简单,关于外链 CSS , JS 的阻塞问题,可以查看这一篇文章 关于CSS堵塞和JS堵塞)。

在这一阶段生成 DOM树

2. 构建CSSOM树

对所有的 CSS 样式信息进行解析。

在这一阶段生成 CSSOM树

3. 合成Render树

将上面生成的 DOM树CSSOM树 进行合并,生成 Render树 。(:before:after 这样的伪元素会在这个环节被构建到 DOM 树中。)

在这一阶段生成 Render树

4. 布局

所有元素的相对位置信息,大小等信息均在这一步得到计算。

在这一阶段生成 布局盒模型

5. 渲染

根据上面的布局产物 盒模型 ,调用 GPU 绘制,合成图层,显示在屏幕上。

在这一阶段生成 目标界面

862e781a3d0647f5936a66b2a3a831b0_tplv-k3u1fbpfcp-watermark.png

举个栗子

<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
  <title>页面标题</title>
  <style>
    body{
      font-size: 36px;
    }
    .main-box{
      width: 200px;
      height: 50px;
      border: 2px solid green;
    }
    span{
      font-size: 24px;
    }
    p{
      color: rosybrown;
      font-size: 18px;
    }
  </style>
</head>

<body>
  <div class="main-box">
    <span class="title">辉夜真是太可爱啦</span>
  </div>
  <p>图解浏览器渲染过程</p>
</body>
</html>

1. DOM树

26b872aefec0480fb5c925ddf7828c49_tplv-k3u1fbpfcp-watermark.png

2. CSSOM树

cc3dfeaf7eec4f67b253e2c2007bfdff_tplv-k3u1fbpfcp-watermark.png

由于 CSS 有继承以及优先级的概念,所以会有样式覆盖的概念。

所以, CSSOM树需要等到完全构建后才可以被使用

3. Render树

ab6fee30b90e4f519271eee35cbc99a8_tplv-k3u1fbpfcp-watermark.png

值得一提的是,display: none; 的元素将不会出现在 Render树 中。

4. 布局盒模型

3b4b756bff31438faaf42703f2fb5962_tplv-k3u1fbpfcp-watermark.png

由于 <div> 设置了宽度和高度, <p> 是块级元素,独占一行。

5. 目标界面

c252fce8d45141b7b817e6b545af23e8_tplv-k3u1fbpfcp-watermark.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容