1.DNS解析
将url转化为ip地址。先查看本地host文件(专门用来保存常用url和ip地址对应关系的’数据库‘)有没有当前域名对应的ip地址,如果有直接发起请求,如果没有就向本地域名服务器中进行递归查找,如果还是没有就用迭代查找的方式查根域名服务器、顶级域名服务器、权限域名服务器。查找后会返回一个对应的ip地址,存储在本地host域中。如果想要加速查找可以使用CDN换粗服务器。
2.三次握手
客户端与服务端建立连接的过程。客户端首先向服务端发送一个SYN包,进入同步状态;服务端像客户端返回一个SYN+ACK包,进入确认同步状态,表示自己已经收到SYN包了;客户端收到后再像服务端发送一个ACK包表示确认,这样双方就可以建立连接了。
3.发起请求
客户端向服务器发起http请求,服务器返回状态码:
200:返回最新资源
304:客户端缓存可继续使用
4.四次挥手
客户端和服务端都可以主动关闭连接。
客户端主动关闭时:客户端像服务端发送一个Fin+ACK包,进入等待1状态;服务端收到后返回一个ACK包表示确认收到,进入关闭等待状态;客户端收到后进入等待2状态;服务端继续把没有发送完的数据发送,发送结束后给客户端发送Fin+ACK包,进入最后确认状态;客户端收到后再发送ACK包,等待两个周期后关闭连接。
5.解析HTML
1.遇到css时,会阻塞DOM树的渲染,并阻塞js执行
2.然后时js加载,js加载会影响DOM树解析,之所以会影响是因为js可能会删除添加节点,如果先解析后加载,DOM树还要重新解析,性能较差。如果不想阻塞DOM解析可以给deffer或async标签。
differ:不会阻塞DOM解析,DOM解析完之后运行
async:不会阻塞DOM解析,资源下载完成后立即执行
6.渲染显示
获取html解析为dom树
解析css形成css树
将dom树,css树合并为render树
进行布局
进行绘制
回流重绘