浏览器请求到页面的展示过程

2 篇文章 0 订阅
1 篇文章 0 订阅

看了计算机网络、javascript权威指南,了解了些浏览器知识,总结一下地址的输入到页面的呈现过程。

一、DNS解析过程

1询问
2询问
3询问
找到14.215.177.38
找到14.215.177.38
1询问
找到14.215.177.38
2询问
找到14.215.177.38
3询问
转发模式
非转发模式
找到14.215.177.38
...
找到14.215.177.38
非转发模式
查询
找到14.215.177.38
查询
找到14.215.177.38
查询
找到14.215.177.38
浏览器地址http://www.baidu.com
DNS解析器
hosts文件
浏览器缓存/系统缓存/路由器缓存
本地DNS服务器
DNS资源
DNS缓存
模式
上级DNS服务器
根DNS服务器
上上级DNS服务器
.com服务器
baidu.com服务器
www.baidu.com服务器

二、tcp/ip通信

应用层封装
传输层封装
网络层封装
数据链路层封装
物理层封装
14.215.177.38请求
上层数据
TCP头+上层数据:数据段
IP头+TCP头+上层数据:数据包
MAC头+IP头+TCP头+上层数据:数据帧
0100101010010000010:Bit

14.215.177.38服务器接到请求后,照着封装解封得到上层数据。

三、服务器响应

服务器响应将html返回给请求客户端。

四、客户端解析返回html

loading
loading
非阻塞线程下载
interactive--dom树构建完成
complete
GUI解析页面
sciprt标签阻塞
async的sciprt标签阻塞
下载完立即执行,执行完解析继续
执行defer属性的sciprt标签
DOMContentLoaded
异步资源加载
window.onload

1、GUI渲染线程创建Document对象(dom树),开始解析web页面,解析html元素或文本后添加element对象或text对象节点到dom树,然后在渲染树绘制盒,这个阶段document.readystate属性值是“loading”。

2、GUI渲染线程遇到没有async和defer属性的<script>元素时,添加节点到dom树。GUI渲染线程阻塞,如果是内部脚本,则启用JavaScript线程处理脚本;如果是外部脚本,则下载脚本,然后启用JavaScript线程处理脚本。在处理脚本过程中如果有使用dom的api,如document.wirte(),会阻塞JavaScript线程启用GUI渲染线程添加节点到dom树,然后在渲染树绘制盒,完成后再阻塞GUI渲染线程,开启JavaScript线程处理脚本。脚本处理完毕后JavaScript线程阻塞,GUI渲染线程开启继续解析web页面。

3、当GUI渲染线程遇到设置async属性的<script>元素时,会下载脚本,并继续解析web页面,当脚本下载完,就会GUI渲染线程阻塞,JavaScript线程启动立即执行脚本,异步脚本禁止使用document.write(可能为了立即执行并解析,所以没有暂停解析或关闭文档流,无法确定在哪点write),使用会发黄色警告,执行完后会阻塞JavaScript线程,GUI渲染线程继续解析web页面。

4、文档解析完成后。document.readyState属性变成“interactive”。

5、之前GUI渲染线程解析到的defer属性的<script>的脚本会在这时按照文档的顺序开始执行,这时候脚本可以访问完整的dom树,禁止使用document.write()。

6、Document对象触发DOMContentLoaded。程序从同步脚本执行转到异步事件驱动阶段(事件触发线程、定时器线程、异步请求线程)。

7、文档虽然完全解析,但可能还有图片等内容等待载入。当所有内容完成载入,并且异步脚本完成执行,document.readyState属性变为“complete”,触发window对象的load事件。

8、往后都是异步驱动阶段(事件触发线程、定时器线程、异步请求线程进行处理)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值