从前端的角度来看,从输入url到页面加载完成发生了什么呢?
总结地来看就是这样几点:
- 浏览器的地址栏输入URL并按下回车
- 浏览器查找当前URL是否存在缓存,并比较缓存是否过期
- DNS解析URL对应的IP
- 根据IP地址建立TCP连接
- HTTP发起请求
- 服务器处理请求,浏览器接收HTTP响应
- 构建DOM树,渲染页面
- 关闭TCP连接
这个过程中比较核心的部分就是
(1). DNS解析 (2). TCP建立连接+HTTP请求 (3). 浏览器渲染页面 (4)断开连接
1.DNS解析
DNS解析实际上就是一个递归查询的过程,实现的是网址到IP地址的转换。
查找顺序大致是: 本地域名服务器
→根域名服务器
→顶级域名服务器
→权威域名服务器
对应网址的解析过程就是:.
->.com
->google.com.
->www.google.com.
2. TCP建立连接+HTTP请求
TCP建立连接就是三次握手的过程,客户端:你好,我要请求数据;服务器端:你好,可以;客户端:好的。
HTTP请求主要发生在客户端,这部分又可以称为前端工程师眼中的HTTP,发送HTTP请求的过程就是构建HTTP请求报文并通过TCP协议发到服务器指定端口(HTTP协议80/8080,HTTPS协议443)。报文由三部分组成:请求行,请求头,请求实体。
3.浏览器渲染页面
- 处理HTML标记并构建DOM树
- 处理css标记并构建CSSOM树
- 将DOM树和CSSOM树合并构建一个渲染树
- 渲染树布局,浏览器通过Render Tree计算出每个节点对象在页面的确切大小和位置
- 渲染树绘制,浏览器会调用渲染器的paint()方法在屏幕上显示内容
DOMContentLoaded
事件触发代表初始的HTML被完全加载和解析,不需要等待CSS,JS,图片加载。
Load
事件触发代表页面中的DOM,CSS,JS,图片已经全部加载完毕。
4.断开连接
客户端:我要断开连接了;服务器:收到;服务器:我也要断开连接了;客户端:收到(我会在2倍的报文最大生存时间后断开连接,如果在这个时间内再收到服务器的消息,我就再发送一遍确认信息)。