前端页面生命周期
1.浏览器接收到URL,到网络请求线程开始;
2.一个完整的HTTP 请求并的发出;
3.服务器接收到请求并转到具体的处理后台;
4.前后台之间的HTTP交互和涉及的缓存机制;
5.浏览器接收到数据包后的关键渲染路径;
6.JS 引擎的解析过程
URL 结构:Protocol://Host:port/Path?Query#Fragement
一.进程与线程
进程就是一个程序运行的实例,操作系统会为进程创建独立的内存,用来存放运行所需代码和数据;而线程是进程的组成部分,每个进程都至少有一个主要线程及可能若干个子线程,这些线程由所属进程启动和管理。
2008年谷歌发布Chorme多进程浏览器之前, 市面上几乎手游的浏览器都是单进程,他们将所有功能模块都运行在同一个进程中。
浏览器把原单进程内功能相对独立的模块头里为单个进程处理对应的任务,主要分为以下进程:
1.浏览器主进程:一个浏览器只有一个主进程,负责菜单栏,标灯等文件访问,前进后退
2.GPU进程:图形处理单元
3.插件进程:加入独立子线程,保护意外奔溃不会对页面造成影响
4.网络进程:负责网页的网络资源加载
5.渲染进程:也称浏览器内核,默认会为每一个标签窗口开辟一个独立的进程,负责html,css ,js等资源转换为交互页面
二.TCP连接的“三次握手” 和“四次挥手”
第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
SYN:同步序列编号(Synchronize Sequence Numbers)
第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
为什么需要三次握手,是为了解决下列的一个问题:
client发出的第一个连接请求报文段并没有丢失
四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发
TCP四次挥手的过程如下:
1.第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
2.第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态,TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3.第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态,(最后确认)状态,等待客户端的确认。
4.第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1, Server进入CLOSED状态,完成四次挥手。
如果有大量的连接,每次在连接、关闭时都要三次握手,四次挥手,会很明显会造成性能低下,因此,
HTTP有一种叫做keep connection的机制,它可以在传输数据后仍然保持连接,当客户端再次获取数据时,直接使用刚刚空闲下的连接而无需再次握手
当TCP连接创建好后,便可以通过HTTP等协议进行前后端的通信,但在实际的网络访问中,并未浏览器和IP地址的服务之间之间通信,往往会在中间加入代理服务器。
三:反向代理
反向代理作用:
1.负载均衡
2.安全防火墙
3.加密及SSL加速
4.数据压缩
5.解决跨域
6.对静态资源缓存
常用反向代理服务器有 Nginx IIS Apache
四:HTTP相关协议特性
HTTP是建立在传输层TCP协议之上的应用层协议,在TCP层面上存在长连接和短链接;
长链接则是持续发送多个数据包,但需要双方发送心跳检查包来维持这个连接;
短链接是当客户端需要像服务器发送请求时,会在网络层IP协议之上建立一个TCP连接,当请求发送并接收到响应后,则断开此连接。
HTTP 1.0 默认使用短连接
HTTP 1.1 默认使用长连接
HTTP 2.0来之前,每个资源的请求都需要开启一个TCP连接,但是由于TCP本身有并发闲置,
当请求资源变多,速度性能则明显降低,为此,经常采用的优化策略包括,将静态资源的
请求进行多域名拆分,对于小图标或者图片使用雪碧图。而2。0后,最好的方式应该是加载单张图像文件,
因为一个http连接上可以发起多次请求。
HTTP 2.0 可以在一个TCP 连接多个资源,分割成更小的帧请求,速度性能明显上升
特性:
1.二进制分帧,实现低延迟,高吞吐量
2.服务器端推送
3.设置请求优先级
4.HTTP头部压缩
五:浏览器缓存
协商缓存与强制缓存,强缓存优于协商缓存
六:关键渲染路径
构建对象模型
浏览器解析html,css,来构建DOM(文档对象模型)和CSSOM(层叠样式对象模型)
进行宣传树