chorme浏览器(内容来自极客李兵老师的浏览器工作原理和实践)

1.Chrome打开一个页面需要启动多少个进程?
一共是4个,
1.浏览器主进程
2.GPU进程
3.实用程序 【Network Service】【Storage Service】
4.标签页
2.线程和进程
一个进程就是一个程序的运行实例
详细解释就是,启动一个程序的时候,操作系统会该程序创建一块内存,用来存放代码、运行时的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程
线程是不能单独存在的,他是由进程来启动和管理的
线程是依附于进程的,而进程中使用多线程并行处理能提升运算效率。
3.进程和线程之间的关系
1.进程中的任意一线程执行出错,都会导致整个进程的崩溃
2.线程之间共享进程中的数据
3.当一个进程关闭后,操作系统会回收进程所占用的内存
4.进程之间的内容相互隔离(如果进程之间需要进行数据通信,就需要用到进程间通信(IPC)的机制)
4.单进程浏览器时代
1.单进程浏览器是指浏览器的所有功能模块都是运行在同一个进程里,他也有很多问题:不稳定,不流畅,不安全
5.多进程浏览器时代
1.浏览器主进程
2.GPU进程
3.网络进程
4.多个渲染进程
5.多个插件进程【有插件才会有】
6.浏览器进程功能
主要负责界面显示、用户交互、子进程管理,同时提供存储等功能
7.渲染进程
核心任务是将HTML、CSS、JS转换成用户可以与之交互的网页,排版引擎Blink和js引擎V8都是运行在该进程中,默认情况下,Chrome会为每个tab标签创建一个渲染进程,出于安全考虑,渲染进程都是运行在沙箱模式下
8.GPU进程
实现3DCSS的效果,chrome的UI界面
9.网络进程
负责网络资源加载
10.插件进程
负责插件的运行
11.什么是FP(first paint)?
是指从页面加载到首次开始绘制的时长
12.IP:把数据包送达目的主机
数据包要在互联网上进行传输,就要符合网际协议(简称:IP)标准,互联网上不同的在线设备都有唯一地址,地址只是一个数字,这和大部分家庭收件地址类似,计算机的地址就称为IP地址,访问任何网站实际上只是你的计算机向另一台计算机请求消息
13.一个数据包的自述
如果要想把一个数据包从主机A发送给主机B,那么在传输之前,数据包上会被附加上主机B的IP地址信息,这样在传输过程中才能正确寻址。额外的,数据包上还会附加上主机A本身的IP地址,有了这些信息,主机B才可以恢复信息给主机A,这些附加信息会被装进一个叫IP头的数据结构里。IP头是IP数据包开头的信息,包含IP版本,源IP地址,目标IP地址、生存时间等
14.数据包从主机A到主机B的旅程
1.上层将含有“极客时间”的数据包交给网络层
2.网络层再将IP头附加到数据包上,组成新的IP数据包,并交给底层
3.底层通过物理网络将数据包传输给主机B
4.数据包被传输到主机B拆开数据包的IP头信息,并将拆开来的数据部分交给上层
5。最终,含有“极客时间”信息的数据包就到达了主机B的上层了
15.UDP:把数据包送达应用程序
1.IP是非常底层的协议,只负责把数据包传送到对方电脑,但是对方电脑并不知道把数据包交给哪个程序,是交给浏览器还是王者荣耀?因此,需要基于IP之上功能开发和应用打交道的协议,最常见的是“用户数据包协议”,简称UDP。
2.UDP中一个重要的信息是端口号,端口号其实就是一个数字,每个想访问网络的程序都需要绑定一个端口号。通过端口号UDP就能把指定的数据包发给指定的程序了,所以IP通过IP地址把数据包发送给指定电脑,而UDP通过端口号把数据包发给正确的程序。和IP头一样,端口号会被装进UDP头里面,UDP头再和原始数据包合并组成新的UDP数据包。UDP包头中除了目的端口,还有源端口等信息。
16.数据包从主机A旅行到主机B的线路
1.上层将含有“极客时间”的数据包交给传输层
2.传输层会在数据包前面附加上UDP头,组成新的UDP头,再将新的UDP数据包交给网络层
3.网络层再将IP头附加到数据包上,组成新的IP数据包,并交给底层
4.数据包被传输到主机B的网络层,在这里主机B拆开IP头信息,并将拆开来的数据部分交给传输层
5.在传输层,数据包中的UDP头会被拆开,并根据UDP中所提供的端口号,把数据部分交给上层的应用程序
6。最终,含有“极客时间”信息的数据包就旅行到了主机B上层应用程序这里
17.TCP(传输控制协议)把数据完整地送达应用程序
是一种面向连接的、可靠的、基于字节流的传输层通信协议
18.TCP的特点
1.对于数据包丢失的情况,TCP提供重传机制
2.TCP引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件
19.TCP连接的生命周期
1.建立连接、传输数据、断开链接
2.详细步骤:
1>首先,建立连接阶段,这个阶段是通过“三次握手”来建立客户端和服务端之间的连接。TCP提供面向连接的通信传输。面向连接是指在数据通信开始执勤先做好两端之间的准备工作。所谓三次握手,是指在建立一个TCP连接是,客户端和服务端总共要发送三个数据包以确认连接的建立。
2>其次,传输数据阶段。在该阶段,接受端需要对每个数据包进行确认操作,也就是接受端在接收到数据包之后,需要发送确认数据包给发送端。所以当发送端发送了一个数据包之后,在规定时间内没有接收到接收端反馈的确认信息,则判断为数据包丢失,并触发发送端的重发机制。同样,一个大的文件在传输过程中会被拆分成很多小的数据包,这些数据包到达接收端后,接收端会按照TCP头中的序号为其排序,从而保证组成完整的数据
3>最后,断开连接阶段。数据传输完毕后,就要终止连接了,涉及到最后一个阶段“四次挥手”来保证双方都能断开连接
20.HTTP协议
http是一种允许浏览器面向服务器获取资源的协议,是web的基础
21.浏览器发送http请求流程
1.构建请求,首先浏览器构建请求行信息,构建好后,浏览器准备发起网络请求 GET /index.html HTTP1.1
2.查找缓存,在真正发送网络请求之前,浏览器会先在浏览器缓存中查询是否有要请求的文件。其中,浏览器缓存是一种在本地保存资源副本,以供下次请求时直接使用的技术,当浏览器发现请求的资源已经在浏览器缓存中存有副本,他会拦截请求,返回该资源副本,并直接结束请求,而不会再去源服务器重新下载,好处有:缓解服务端压力,提升性能,对于网站来说,缓存是实现快速资源加载的重要组成部分
3.准备IP地址和端口
浏览器会请求DNS返回域名对应的IP,当然浏览器还提供了DNS数据缓存服务,如果某个域名已经解析过了,那么浏览器会缓存解析的结果,以供下次查询时直接使用,这样也会减少一次网络请求
4.等待TCP队列
现在已经把端口和IP地址都准备好了,那么下一步是不是可以建立TCP连接了呢?
答案依然是不行,chrome有个机制,同一个域名同时建立6个TCP连接,如果在同一个域名下同时有10个请求发生,那么其中4个请求会进入排队等待状态,直至进行中的请求完成
5.建立TCP连接
排队等待结束之后,终于可以快乐的和服务器握手了,在HTTP工作开始之前,浏览器通过TCP与服务器建立连接
6.发送HTTP请求
一旦建立了TCP连接,浏览器就可以和服务端进行通信了,而HTTP中数据正是在这个通信过程中传输的,首先浏览器会向服务器发送请求行,它包括请求行,请求方法、请求URI和HTTP版本协议
7.服务端处理HTTP请求流程
7.1.返回请求
7.2断开连接,通常情况下,一旦服务器向客户端返回了请求数据,他就要关闭TCP连接,不过如果浏览器或者服务器在其请求头中加入了Connect:Keep-Alive,
那么TCP连接在发送后仍然保持打开状态。保持TCP连接可以省去下次请求时需要建立连接的时间,提升资源加载速度。
8.重定向
22.为什么很多站点第二次打开速度很快?
如果第二次页面打开很快,主要原因是第一次加载页面过程中,缓存了一些耗时的数据
23.哪些数据会被浏览器缓存
DNS缓存和页面资源缓存
24.DNS缓存
浏览器本地把对应的IP和域名关联起来
25.浏览器资源缓存
1.首先,我们看下服务器是通过什么方式让浏览器缓存数据的?
2.当服务器返回HTTP响应头给浏览器时,浏览器是通过响应头中的Cache-Control字段来设置是否缓存该资源。通常,我们还需要为这个资源设置一个缓存过期时长,而这个时长是通过Cache-Control中的Max-age参数来设置,
比如 Cache-Control:Max-age=2000,设置的缓存时间是2000秒,这也就意味着,
3.在该资源还未过期的情况下,如果再次请求该资源,会直接返回缓存中的资源给浏览器。
4.但如果缓存过期了,浏览器则会继续发起网络请求,并且在HTTP请求头中带上 If-None-Match: "4f80f-13c-3alxb12a",服务器收到请求头后,会根据if-None-Match的值来判断请求的资源是否有更新。
5.如果没有更新,就返回304状态吗,相当于服务器告诉浏览器:这个缓存可以继续使用,这次就不重复发送数据给你了
6.如果资源有更新,服务器就直接返回最新资源给浏览器
26.登录状态是如何保持的
1.用户打开登录页面,在登录框里填入用户名和密码,点击确定按钮,点击按钮会出触发页面脚本生成用户登录信息,然后调用post方法提交用户登录信息给服务器
2.服务器接收到浏览器提交的信息之后,查询后台,验证用户登录信息是否正确,如果正确的话,会生成一段表示用户身份的字符串,并把该字符串写到响应头的set-Cookie字段里,如下所示,然后把响应头发送给浏览器

Set-Cookie: UID=3431uad;

3.浏览器在接收到服务器的响应头后,开始解析响应头,如果遇到响应头里含有Set-Cookie字段的情况,浏览器就会把这个字段信息保存到本地,比如把UID=3431uad保持到本地
4.当用户再次访问时,浏览器会发起HTTP请求,但在发起请求前,浏览器会读取之前保存的Cookie数据,并把数据写进请求头里Cookies字段里
Cookie: UID=3431uqd; 然后浏览器再将请求头发送给服务器
5.服务器在收到HTTP请求头数据之后,就会查找请求头里面的“Cookie”字段信息,当查找到包含UID=3431uad的信息时,服务器会查询后题啊,并判断该用户是已登录状态,然后生成含有该用户信息的页面数据,并把生成的数据发送给浏览器
6.浏览器在接收到含有当前用户的页面数据后,就可以正确展示用户登录的状态信息了
27.从输入URL到页面展示,这中间发生了什么?
1.首先,浏览器进程接收到用户输入的URL请求,浏览器进程便将该URL转发给网络进程
*详解:用户输入
当用户在地址栏中输入一个查询关键字时,地址栏会判断输入的关键字时搜索内容还是请求URL,如果是搜索内容,地址栏会使用浏览器默认引擎,来合成新的待搜索关键字的URL,如果判断输入内容符合URL规则,比如输入的是time.geekbang.org,那么地址栏会根据规则,把这段内容加上协议,合成为完整的URL,如https://time.geekbang.org,
当用户输入关键字并敲回车之后,这意味着当前页面即将要被替换成新的页面,不过在这个流程继续之前,浏览器还给了当前页面一次执行beforeunload事件的机会,beforeunload事件允许页面在退出之前执行一些数据清理操作,还可以询问用户是否要离开当前页面,比如当前页面可能有未提交完成的表单,因此用户可以通过beforeunload事件来取消导航,让浏览器不再执行任何后续工作
当前页面没有监听beforeunload事件,或者同意了继续后续流程,那么浏览器便进入下面状态(开始加载url浏览器状态),从图中可以看出,当浏览器刚开始加载一个地址之后,标签页上的图标便进入了加载状态,但此时图中页面显示的依然是之前打开的页面内容,并没有立即替换为极客时间的页面,因为需要等待提交文档阶段,页面内容才会被替换
*
2.然后,在网络进程中发起真正的URL请求
详解:URL请求过程
接下来便进入了页面请求资源过程,这时,浏览器进程会通过进程间通信(IPC)把URL请求发送至网络进程,网络进程接收到URL请求之后,会在这里发起真正的URL请求流程,那么具体流程是怎样的呢?

首先,网络进程会查找本地缓存是否缓存了该资源。如果有缓存资源,那么直接返回资源给浏览器进程;如果在缓存中没有找到资源,那么直接进入网络请求流程。这请求前的第一步是要进行DNS解析,以获取请求域名的服务器IP地址。如果请求协议是HTTPS,那么还需要建立TLS连接。

接下来就是利用IP地址和服务器建立TCP连接。连接建立后,浏览器端会构建请求行、请求头等信息,并把和该域名相关的Cookie灯数据附加到请求头中,然后向服务器发送构建的请求信息。

服务器接收到请求信息后,会根据请求信息生成响应数据(包括响应行、响应头和响应体等信息),并发给网络进程。等网络进程接收了响应行和响应头之后,就开始解析响应头的内容了(为了方便描述,后面将响应头和响应行统称为响应头)
(1)重定向

3.接着网络进程接收到了响应头数据,便解析响应头数据,并将数据转发给浏览器进程
4.浏览器进程接收到网络进程的响应头数据之后,发送“提交导航(CommitNavigation)“消息到渲染进程
5.渲染进程接收到“提交导航”的消息之后,便开始准备接收HTML数据,接收数据的方式是直接和网络进程建立数据管道
6.最后渲染进程会向浏览器进程“确认提交”,这是告诉浏览器进程:“已经准备好接受和解析页面数据了”
7.浏览器进程接收到渲染进程“提交文档”的消息之后,便开始移除之前旧的文档,然后更新浏览器进程中的页面状态
这其中,用户发出URL请求到页面开始解析的这个过程,就叫做导航

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值