您的位置:首页 > Web前端 > JavaScript

JavaScript 网页运行原理 详解

2018-01-11 10:05 549 查看
打卡一个网页,浏览器会首先创建一个窗口,该窗口就是一个 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代码都是由同一个线程来执行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: