前端经典面试题1--浏览器页面的加载过程

首先,浏览器在加载页面的时候,会用到GUI渲染线程(渲染浏览器HTML元素)和Javascript引擎线程(处理Javascript脚本程序),由于Javascript在执行过程中可能会改变页面结构和样式,因此二者之间被设计为互斥的关系,也就是说当Javascript引擎执行时,GUI线程会被挂起。

具体加载过程如下:

  1. 当打开一个官网的时候,浏览器会从服务器中获取到HTML内容;

  2. 浏览器从上到下解析HTML元素,<head>标签内容会先被解析,此时浏览器还没开始渲染页面;

  3. <head>标签若包含<script>标签,script元素通过src属性指向外部资源,当浏览器解析到这里时,会暂停解析并下载Javascript脚本;

  4. Javascript脚本下载完成后,浏览器的控制权转交给Javascript引擎;

  5. 当脚本执行完成后,控制权会转交给渲染引擎;

  6. 此时<body>元素内容开始被解析,浏览器开始渲染页面;

       我们可以看到<head>标签里的script元素会阻塞页面的渲染,如果外部脚本加载时间很长,就会造成网页长时间失去响应,浏览器就会呈现“假死”状态,这也就是为什么我们通常将Javascript脚本放在<body>的后面的原因。    当然,我们也可以使用defer/async/preload等属性来标记script标签,来控制Javascript的加载顺序。

       浏览器在渲染页面的时候,会加载HTML和CSS,以获得DOM树和CSS规则树,他们结合后才渲染出页面,因此我们还常常将CSS放在<head>里, 可以用来避免浏览器渲染的重复计算。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杜coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值