1,通过dns解析url中域名到ip(比如查找www.baidu.com这个域名)
1.1 先查看浏览器是否有解析过该域名,是否还有它的缓存,浏览器的缓存时间2~10分钟左右,具体看dns解析生效的时间,找到有缓存的ip则返回,没有则进行下一步
1.2 浏览器向系统发起查询,系统向配置的dns服务器查询,如果找到则返回,如果没有进行下一步,下面就是dns服务器的接力
1.3首先向根dns服务器去查询(全球dns根服务器只有13台【1台在日本1台在澳大利亚2台在欧洲9台在美国】,还有其他镜像),根服务器会返回com所在的dns服务器的地址(这种顶级域名所在的dns解析服务器称为顶级dns解析服务器)
1.4再向com所在的顶级dns解析服务器发起查询,会返baidu.com所在的dns服务器的地址
1.5再向baidu.com所在的dns服务器发起查询,查询到www.baidu.com的服务器ip地址返回,查不到则报错说明域名解析有问题或者域名过期等
2,找到ip,开始进行三次握手,客户端和服务器建立通信连接
详细:https://blog.csdn.net/weixin_44134588/article/details/110116104
3,连接建立后,客户端向服务器发起查询请求
4,服务器内部处理,返回网页字符串htmlstring (网页的状态:init - loading - interactive - complete)
5,浏览器收到htmlstring,开始进行解析构建dom树
1,从html标签开始解析构建dom树
2,遇见link引入的css资源的话,新起线程去加载css并构建cssom,css不会阻塞dom树的构建
3,遇见script引入的js资源,阻止dom树的解析构建,去加载js,加载完成后再继续dom树的解析构建,所以需要把js放在body底部
1,如果script引入js时声明了defer属性,表示这个资源延迟执行,不阻塞dom树的解析构建,defer声明的js会在DOMContentLoaded执行前执行。如果多个声明defer属性的js,他们是按照声明的顺序来执行
2,如果script引入js时声明了async属性,表示这个资源异步执行,不阻塞dom树的解析构建,async声明的js会在onLoad执行前执行。如果多个声明async属性的js,他们不按照声明的顺序来执行
4,当dom属性解析构建完成后,cssom也构建完成了,合并生成渲染树(render Tree),此时浏览器开始描述这些元素的属性
5,根据这些元素的属性生成渲染层或者合成层,合成层是一个独立的层级,利用这个特性来优化渲染
6,渲染层合成层生成完毕后,浏览器呈现引擎去调用底层的显卡,来绘制页面内容,显示到屏幕上