浏览器是如何解析网页的!

当我们输入URL回车后发生了什么呢?接下来我们来简单的看看。

1、URL解析:主要有地址解析(合法、编码、内容判断)  、  HSTS   、 访问限制操作、安全检查操作、缓存检查操作等。

2、DNS查询 : 浏览器缓存——> 操作系统缓存——>路由器缓存——>ISP   DNS 缓存 ——> 根域名服务器查询。

3、TCP连接(四层封装)

                                          简单三次握手:

                                                                 客户端:服务端你在不在?

                                                                 服务端:客户端我在,你要连接我吗?

                                                                  客户端:是的,要链接。

                                                                 接下来、 连接打通,开始请求、发送HTTP请求。

4、处理请求:HTTP解析(域名、路径、方法等)、重定向、URL重写等

5、浏览器接受响应:资源分析、根状态码做事、压缩问题、响应

6、渲染页面:

HTML解析

                      第一步:解码(UTF-8或者GB2312等等等)解析成HTML。

                       第二步:预解析(识别请求资源比如imges中SRC属性加入请求队列。)

                      第三步:并行操作:符号化,构建树、解标签、创DOM节点

 CSS解析

                    第一步:从左到右解析选择器进行判断等

                   举例:div    .p   {    }   判断P的父元素是不是div

渲染树

                    第一步:DOM树、CSS规则合并树、渲染树。

                    第二步:计算大小、级联、渲染阻塞

                                   渲染阻塞:①浏览器遇到<script>标签DOM停止直至脚本加载完成。

                                                      ②若JS依赖CSS,则等CSS Rules构建完成,再来执行script。

                                   避免阻塞:CSS阻塞JS                 JS阻塞DOM

                                                         原则:CSS排在JavaScript资源前面

                                                                      JS放在</body>前面(<HTML>底部)

                                                                      其他方法:defer和async

                   第三步:布局与绘制(确定位置大小,调用paint()方法)

                   第四步:合并与渲染

                   第五步:reflow与repaint(回流与重绘)

                  第六步:JS编码执行

                                ①语法分析:语法正确与否、分析变量声明,变量值等、解析抽象语法树(AST)、AST——>机器指令

                                 ②预编译、创建执行上下文、创建变量对象、作用于链、this指向等问题。

                              补充:JS三种运行环境:全局环境、函数环境、eval()。

                                 ③执行             JS线程(虽是单线程实际四个线程在工作)      JS引擎线程              事件触发线程   定时器触发线程     HTTP异步请求线程

                                   然后:宏任务——> 微任务——>宏任务(异步)

7、断开链接、TCP四次挥手。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值