Chrome仅仅打开一个页面,为什么会有4个进程?下面文章将为您揭秘
浏览器的原理与实践(1)
Chrome仅仅打开一个页面,为什么会有4个进程
早期的单进程架构
所有的功能模块都在同一个进程中运行,包括网络,插件,js运行环境等 缺点:
- 不安全
- 不稳定
- 不流畅
多进程架构
将功能分别在对应的进程中实现,浏览器进程可分为:
- 浏览器主进程
- 渲染进程
- GPU进程
- 插件进程
- 网络进程
进程之间通过IPC进程通信,每个进程都是独立运行互不影响,每个Tab页都是独立的渲染进程,js即使阻塞也是阻塞当前页面的渲染,插件和渲染进程都是放到安全沙箱中,恶意程序无法突破沙箱获取系统权限
未来的浏览器架构
面向服务架构,每个进程都是独立的服务,可以解决原有架构高耦合,低内聚,不易扩展的缺点
扩充点:
- 同一站点,即根域名相同和协议相同
https://time.geekbang.org
https://www.geekbang.org
https://www.geekbang.org:8080
- 同一站点的页面,父页面子页面都属于同一站点,一个页面崩溃会导致同一站点的页面全部崩溃
TCP协议:如何保证页面文件能被完整送达浏览器?
- IP地址,将数据包送达目的主机
- 端口号,将数据包送到目的主机的应用程序
协议
UDP
- 携带数据包,IP地址,端口号,将数据包送到目的主机
- 缺点: 不能保证数据点额可靠性,单数传输速度很快,不提供重发功能,适用于音频和视频
TCP
- 携带数据包,IP地址,端口号,以及序列号,将数据包送到目的主机
- 面向连接,可靠基于字节流的传输层协议,提供重发功能,并且户按照序列号对数据包进行排序
- 连接需要三次握手,断开需要四次挥手
UDP协议和TCP协议都是传输层协议,HTTP协议是基于TCP协议,是应用层协议
HTTP请求流程:为什么很多站点第二次打开速度会很快?
浏览器发起HTTP的请求流程
- 构建请求 GET /index.html HTTP1.1
- 查找缓存,如果没有缓存则发送请求查询服务器
- 准备IP地址和端口号,IP地址通过DNS进行解析域名进行查询,DNS第一次查询到之后会进行缓存
- 等待TCP队列,HTTP1协议规定一次只能发送6个请求
- 建立TCP连接
服务器处理HTTP请求
为什么很多站点第二次打开速度会很快
第一次查询的时候会将DNS和页面资源缓存起来,一般通过HTTP响应头来设置,Cache-Control:Max-age=2000,如果缓存过期了,需要继续发起网络请求则需要在HTTP请求头中带上,If-None-Match: "4f80f-13c-3a1xb12a",服务器或根据值来判断资源时候需要更新
登录状态如何保存
浏览器输入用户名和密码发送,服务器验证通过之后会设置响应头尾Set-Cookie: UID-343luad,浏览器接受到之后会缓存起来,再次发送的时候只需要将请求头设置为Cookie: UID=3431uad;服务器接受到之后就会验证是否正确