浏览器工作原理1==进程、线程、http请求

 

1、优化现有web应用,需要了解浏览器中的网络流程、页面渲染流程、javascript执行流程、web安全理论

2、并行处理

    计算机中同一时刻处理多个任务。而多线程可以并行处理任务。

3、线程、进程(原文)

    线程不是单独存在的,是通过进程启动和管理的。一个进程就是一个程序的运行实例。启动一个程序时,操作系统会为这个程序创建一块内存、数据和执行任务的主线程,这样的运行环境叫做进程

    

    线程依附于进程,线程中使用多线程并行处理提升效率。

    线程和进程的关系:

    【1】. 进程中的任意一线程执行出错,都会导致整个进程的崩溃。

    【2】 线程之间共享进程中的数据。

    【3】. 当一个进程关闭之后,操作系统会回收进程所占用的内存。

    【4】. 进程之间的内容相互隔离。

   

     在硬件层面:

    CPU在取指令,经过译码器编译之后,进行指令分发,将没有相互依赖的指令分别执行,存放在一个缓冲区中,等待依赖数据齐全之后进行重排,计算输出。

    (1)进程中线程的出错会导致进程崩溃(硬件层面的流水线)。

    (2)线程之间可以共享数据,对进程的公共数据进行读写操作。

    (3)进程关闭之后,操作系统回收进程占用的内存,包括线程中的内存泄漏

    (4)进程间相互隔离,如果一个进程崩溃了,不会影响到其他进程。

    

4、现在Chrome浏览器进程

    浏览器进程。主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。

    渲染进程。核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下。

    GPU 进程。其实,Chrome 刚开始发布的时候是没有 GPU 进程的。而 GPU 的使用初衷是为了实现 3D CSS 的效果,只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,这使得 GPU 成为浏览器普遍的需求。最后,Chrome 在其多进程架构上也引入了 GPU 进程。

    网络进程。主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的,直至最近才独立出来,成为一个单独的进程。

    插件进程。主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。

 存在的问题:资源占用增加体系架构更复杂

5、浏览器接受网络文件的过程(原文)

[1] IP:把数据包送达目的主机

    把一个数据包从主机 A 发送给主机 B,那么在传输之前,数据包上会被附加上主机 B 的 IP 地址信息,这样在传输过程中才能正确寻址。额外地,数据包上还会附加上主机 A 本身的 IP 地址,有了这些信息主机 B 才可以回复信息给主机 A。这些附加的信息会被装进一个叫 IP 头的数据结构里。IP 头是 IP 数据包开头的信息,包含 IP 版本、源 IP 地址、目标 IP 地址、生存时间等信息。

[2] UDP:把数据包送达应用程序

    IP 是非常底层的协议,只负责把数据包传送到对方电脑,但是对方电脑并不知道把数据包交给哪个程序,因此,需要基于 IP 之上开发能和应用打交道的协议,最常见的是“用户数据包协议(User Datagram Protocol)”,简称 UDP。UDP 中一个最重要的信息是端口号,端口号其实就是一个数字,每个想访问网络的程序都需要绑定一个端口号。通过端口号 UDP 就能把指定的数据包发送给指定的程序了,所以 IP 通过 IP 地址信息把数据包发送给指定的电脑,而 UDP 通过端口号把数据包分发给正确的程序。和 IP 头一样,端口号会被装进 UDP 头里面,UDP 头再和原始数据包合并组成新的 UDP 数据包。UDP 头中除了目的端口,还有源端口号等信息。

[3]  TCP:把数据完整地送达应用程序

    TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。相对于 UDP,TCP 有下面两个特点:

    对于数据包丢失的情况,TCP 提供重传机制;

    TCP 引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件。

    和 UDP 头一样,TCP 头除了包含了目标端口和本机端口号外,还提供了用于排序的序列号,以便接收端通过序号来重排数据包。

6、完整的 TCP 连接过程

    一个完整的 TCP 连接的生命周期包括了“建立连接”“传输数据”和“断开连接”三个阶段。

    首先,建立连接阶段。这个阶段是通过“三次握手”来建立客户端和服务器之间的连接。TCP 提供面向连接的通信传输。面向连接是指在数据通信开始之前先做好两端之间的准备工作。所谓三次握手,是指在建立一个 TCP 连接时,客户端和服务器总共要发送三个数据包以确认连接的建立。

    其次,传输数据阶段。在该阶段,接收端需要对每个数据包进行确认操作,也就是接收端在接收到数据包之后,需要发送确认数据包给发送端。所以当发送端发送了一个数据包之后,在规定时间内没有接收到接收端反馈的确认消息,则判断为数据包丢失,并触发发送端的重发机制。同样,一个大的文件在传输过程中会被拆分成很多小的数据包,这些数据包到达接收端后,接收端会按照 TCP 头中的序号为其排序,从而保证组成完整的数据。

    最后,断开连接阶段。数据传输完毕之后,就要终止连接了,涉及到最后一个阶段“四次挥手”来保证双方都能断开连接。

7、浏览器端发起 HTTP 请求流程(原文

【1】构建请求

    浏览器构建请求行信息(如下所示),构建好后,浏览器准备发起网络请求。

【2】查找缓存

    在真正发起网络请求之前,浏览器会先在浏览器缓存中查询是否有要请求的文件。其中,浏览器缓存是一种在本地保存资源副本,以供下次请求时直接使用的技术。

    当浏览器发现请求的资源已经在浏览器缓存中存有副本,它会拦截请求,返回该资源的副本,并直接结束请求,而不会再去源服务器重新下载。这样做的好处有:

    缓解服务器端压力,提升性能(获取资源的耗时更短了);

    对于网站来说,缓存是实现快速资源加载的重要组成部分。

【3】准备 IP 地址和端口

    浏览器使用 HTTP 协议作为应用层协议,用来封装请求的文本信息;并使用 TCP/IP 作传输层协议将它发到网络上,所以在 HTTP 工作开始之前,浏览器需要通过 TCP 与服务器建立连接。

    第一步浏览器会请求 DNS 返回域名对应的 IP。当然浏览器还提供了 DNS 数据缓存服务,如果某个域名已经解析过了,那么浏览器会缓存解析的结果,以供下次查询时直接使用,这样也会减少一次网络请求。

【4】等待 TCP 队列

    Chrome 有个机制,同一个域名同时最多只能建立 6 个 TCP 连接,    超出需要等待

【5】建立 TCP 连接

    在 HTTP 工作开始之前,浏览器通过 TCP 与服务器建立连接。

【6】发送 HTTP 请求

    一旦建立了 TCP 连接,浏览器就可以和服务器进行通信了。而 HTTP 中的数据正是在这个通信过程中传输的。

    首先浏览器会向服务器发送请求行,它包括了请求方法、请求 URI(Uniform Resource Identifier)和 HTTP 版本协议。

8、服务器端处理 HTTP 请求流程

【1】返回请求

    首先服务器会返回响应行,包括协议版本和状态码。服务器也会随同响应向浏览器发送响应头。响应头包含了服务器自身的一些信息,比如服务器生成返回数据的时间、返回的数据类型(JSON、HTML、流媒体等类型),以及服务器要在客户端保存的 Cookie 等信息。发送完响应头后,服务器就可以继续发送响应体的数据,通常,响应体就包含了 HTML 的实际内容。

【2】断开连接

    一旦服务器向客户端返回了请求数据,它就要关闭 TCP 连接。

Connection:Keep-Alive

    如果浏览器或者服务器在其头信息中加入了  Keep-Alive ,那么 TCP 连接在发送后将仍然保持打开状态,这样浏览器就可以继续通过同一个 TCP 连接发送请求。保持 TCP 连接可以省去下次请求时需要建立连接的时间,提升资源加载速度。

【3】重定向

9、浏览器资源缓存

    缓存处理的过程:

    当服务器返回 HTTP 响应头给浏览器时,浏览器是通过响应头中的 Cache-Control 字段来设置是否缓存该资源。通常,我们还需要为这个资源设置一个缓存过期时长,而这个时长是通过 Cache-Control 中的 Max-age 参数来设置的,比如上图设置的缓存过期时间是 2000 秒。

    Cache-Control:Max-age=2000

    在该缓存资源还未过期的情况下, 如果再次请求该资源,会直接返回缓存中的资源给浏览器。

    很多网站第二次访问能够秒开,是因为这些网站把很多资源都缓存在了本地,浏览器缓存直接使用本地副本来回应请求,而不会产生真实的网络请求,从而节省了时间。同时,DNS 数据也被浏览器缓存了,这又省去了 DNS 查询环节。

猜你喜欢

转载自www.cnblogs.com/pangchunlei/p/12695767.html
今日推荐