输入url后到页面渲染发生什么事?
一.DNS解析,将域名解析为ip地址
读取缓存顺序如下:
先读取浏览器DNS缓存
系统DNS缓存
路由器缓存
网络运营商缓存
递归搜索
二.TCP连接:即TCP的三次握手
1第一次握手,由浏览器发起,告诉服务器。我要发请求了;
2第二次握手,由服务端发起,告诉浏览器我准备接受了,你赶紧发送吧;
3.第三次握手,由浏览器发起,告诉服务器我马上发起了,你准备接受吧。
为啥要发起三次?
就好像甲给乙打电话,甲不能接通后就告诉乙什么事,需确认乙有空才可以;
同样乙也要确认甲有没有空才能和他交流。
最后一次甲需要和乙再确认一次,万一甲有事,乙(服务器)一直等着,消耗资源。
三. 发送http请求
请求报文:http协议的通信内容
四. 接受响应返回报文
响应报文
五、渲染页面
1.遇见html标记,调用html解析器解析成Token标记并构建成DOM树(依据深度优先原则:即一条道走到黑)。
2.遇见style/link标记。调用css解析器,处理css标记,用构建cssom树。
3.遇见script标签标记,调用js解析器,处理script代码(绑定事件,修改dom/cssom树)
4.将dom树和cssom树合并成一个渲染树(render Tree);
5.开始根据渲染树计算布局,计算每个节点的几何信息(布局),布局主要是确定各个元素的位置和尺寸。
6.绘制页面:将各个节点的颜色绘制到屏幕上(渲染)
注意:这5个步骤不一定按照顺序执行,若dom树或cssom树被修改了,可能会发生重排和重绘,
会执行多次布局和渲染,往往实际页面中这些步骤会被执行多次。
尽量避免重排和重绘,否则会引起重排(reflow):
如:dom节点的删除,添加
dom节点的尺寸变化,位置变化(如display:none->block)
重绘:
如改变字体颜色,visibility,opacity等。
六. 断开连接
四次TCP挥手
第一次挥手,浏览器发起,我东西发送完了(请求报文),准备关闭吧;
第二次挥手 服务器发起,告诉浏览器我东西接受完了(请求报文),准备关闭了,你也在准备吧;
第三次挥手,服务器发起 我东西发送完了(响应报文),你准备关闭吧;
第四次挥手,由浏览器发起,告诉服务器(响应报文),我东西接受完了,你也准备吧。