借助performance工具直观理解浏览器的渲染过程

前言

在学习前端的过程中,大家都会对浏览器这个神秘的盒子感到好奇
从输入一串url到页面解析渲染完成,浏览器都干了些啥?

直观展示

为了更好的理解这个过程,我们使用一个工具来帮助我们
Chrome自带的开发工具中的performance(老版本和其他浏览器为timeline

借助performance工具直观理解浏览器的渲染过程_第1张图片

点击录制,然后在地址栏输入我们的url
这里以百度为例,输入www.baidu.com,回车
然后点击录制结束,就能看到这个东西

借助performance工具直观理解浏览器的渲染过程_第2张图片

网络请求

我们最先看到的是这个

clipboard.png

字面意思就可以理解,浏览器在向服务器发送请求,并接收响应头和响应体
不过实际上在这之前,浏览器还做了一些事
得先知道朝哪个服务器发送请求吧

  1. 根据url,先去本地DNS缓存列表里寻找对应的服务器的ip地址和端口号,若没有找到,继续寻找系统缓存和路由缓存,若找到则跳转第三步
  2. 还没找到的话则请求本地DNS服务器,没有就将域名发送给其他服务器,递归寻找,从根域名服务器开始不断向下递归,直到返回对应的IP地址和端口号,并将其缓存
  3. 根据ip地址和端口号,与目标服务器建立TCP连接(三次握手)

这三步并没有被我们看见,然后接下来的事就被我们观察到了
浏览器向服务器发送http请求,并接收返回的响应头和响应体

继续往下看

借助performance工具直观理解浏览器的渲染过程_第3张图片
黄色部分都是浏览器的一些默认行为,其中包括隐藏本来的标签页内容等等
以及下面的Recalculate Style(重新计算样式),Layout(重排)是为清空本来的页面,为新页面做准备
这些不用管它,不过在这中间我们又一次看到了Receive Data
那是因为服务器在发送数据的时候,可能会进行拆包,分几次发送

解析html

浏览器比较勤快,它并不会等html完全接收完才开始解析,而是接受一部分就开始解析一部分

借助performance工具直观理解浏览器的渲染过程_第4张图片

HTML Parser的任务是将HTML标记,解析成DOM Tree,这是一个深度遍历的过程,只有Dom下的子节点都被遍历完成,才遍历下一个同级Dom节点

借助performance工具直观理解浏览器的渲染过程_第5张图片
同时,在解析的过程中,如果遇到了图片,link标签,script标签,都会向服务器发送请求
例如我们上图,遇到了百度的logo图片,就请求下载

借助performance工具直观理解浏览器的渲染过程_第6张图片

js解析

借助performance工具直观理解浏览器的渲染过程_第7张图片
遇到js就立即解析下载执行执行

借助performance工具直观理解浏览器的渲染过程_第8张图片
不管是内联的还是外部的,都会阻塞后续dom的解析和渲染
所以一般将

你可能感兴趣的:(借助performance工具直观理解浏览器的渲染过程)