JavaScript 网页运行原理 详解

打卡一个网页,浏览器会首先创建一个窗口,该窗口就是一个 window对象,就是 Javascript运行所依附的去全局环境对象和全局作用域对象。为加载网页文档,当前窗口将为要打开的网页创建一个 document对象,然后将网页加载到 document中,网页就是在这个过程中一边加载一边呈现出来的

在一边加载一边呈现过程中,有 <script>标签分割的每一段JavaScript代码都是严格按照文档中的顺序来加载和执行的,对于那些<script>标签引入的外部JS文件,加载过程可能分派给多个线程去完成,但是浏览器会等待需要的JS文件加载完成,最终还是会按照顺序执行JavaScript代码的程序逻辑,之后在处理其它内容

进行加载和执行的目的是建立文档对象模型 (DOM) 主框架,而这个主框架是由当前文档窗口主线程离开处理,并依照严格顺序进行,而网页中可以异步加载其他附属资源,如 图片、声音和视频等多媒体数据,是安排在其它线程去处理

Web标准 有一个限制,就是对同一个域名最多只允许使用两个连接来读取内容,就是在同一个域名情况下只有两个线程可以同时加载内容,其它的会处于等到状态。因此,浏览器使用多少线程在同时加载网页,要看网页内容涉及多少域名,反正一个域名两个连接,线程多了也会阻塞

当网页主框架加载和执行完毕,浏览器才开始触发 window对象或 body对象的 onload事件,在极少数情况下网页要是没有body对象浏览器会在网页加载完后自动创建一个body对象,并将其设置为document的body属性

设置window对象的onload事件 或 设置body对象的 onload事件,只有一个起作用

当网页主框架加载完成,由此引发的事件也处理完毕,JavaScript就等待下一次执行的时间,当用户的点击、网页定时刷新或者setTimeout 和 setinterval语句达到指定时间,JavaScript 执行引擎再次被启动,以执行相应的JavaScript代码,因此可以认为 JavaScript总是被动执行的

当打开或刷新网页时,顶层的 JavaScript代码被执行;设定的时间到达时,相关的JavaScript函数又被执行,网页元素的事件又被执行,但一切寂静下来之后,没有任何JavaScript代码被执行

同一个浏览器进程中开启多个页面,多个窗口,里面的 JavaScript代码都是由同一个线程来执行


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值