1. 浏览器架构
- 就目前chorme浏览器而言,他是多进程的。有一个浏览器主进程,一个GPU进程,一个网络进程,多个渲染进程,多个插件进程。
注意:
- 线程是不能单独存在的,它是由进程来管理和启动的,一个进程就是一个程序运行的实例。
- 进程中使用多线程并行处理可以提高运行速度
- 线程之间可以共享数据
- 进程中任意线程出错会导致整个进程崩溃。
- 关闭进程后,操作系统会回收进程所占内存
-
进程之间是相互隔离的
- 打开一个页面所以至少需要四个进程,如果有插件的话会多加一个插件进程。
- 多进程优缺点:
- 优点:提高了浏览器的安全性,流畅性 , 稳定性
- 缺点: 资源占用率提高,体系架构复杂度提高。
-
解决方案:
整体向面向服务的架构发展,把各个模块拆封成独立的服务,可以在独立的进程中运行,实现高内聚,低耦合,易于维护和扩展。简单,稳定,高速的目标
如果在资源受限的设备上,chorme还能把多个服务合并到一个进程里,从而节约内存
- 早期浏览器
单进程,不稳定,不流畅 , 不安全 , - 扩展
- 为什么单个页面卡死会导致整个浏览器崩溃
每一个页面对应一个渲染进程,但是如果从一个页面打开一个新页面,并且新页面和和原来的页面同属一个站点(协议和跟域相同),那么会复用同一个渲染进程,两个页面可以互相通信 ,共享js运行环境 , 所以为什么一个页面崩溃会导致统一站点的所有页面都崩溃, - 页面崩溃的原因
a. 页面内存泄漏:js循环引用 / 滥用闭包 / dom删除,但是事件没有卸载 / 回调函数或定时器没有手动回收。。。
b. 插件崩溃
2. TCP协议
互联网中都数据都是通过数据包来传输的,当数据特别大大时候会分割成很多小数据包来传输。
数据包安全送达涉及到 IP, UDP, TCP
- IP:数据包送达到指定地址。
- UDP:通过端口号把数据发送给指定程序。UDP不能保证数据的完整性,但是传递速度很快,一般用在视频,游戏这类。
- TCP:是一种面向连接,可靠的,基于字节的传输层通信协议。在牺牲速度的基础上保证了数据的完整性。通过三次握手,四次挥手以及数据包的校验,把数据包的数量提高了。数据包通过tcp头中的序号对数据包排序。
简单来说,
- HTTP协议属于传输层,TCP属于应用层,HTTP协议位于TCP协议的上层。
- 浏览器在收到HTTP响应头中的Content-type就会开始准备渲染进程了,一旦接收到数据就开始渲染DOM,基于HTTP协议的请求不会丢失数据,数据超时重试都在TCP层解决了。所以会有TCP层的队首阻塞问题(只要数据不完整就会一直等待,)HTTP2只是解决了http层的队首阻塞问题,并没有解决TCP层的队首阻塞问题。
- 数据在传输过程中会数据丢失,可能的原因网络波动,恶意程序拦截,网络阻塞等。。。
- 先会通过三次握手建立TCP链接,然后才会发送http请求头和请求行给服务器,然后服务器返回响应头和响应行,响应体,完成后通过四次挥手断开链接。