# 二.代码执行
# 1.2. 浏览器模型
用户界面:地址栏、前进/后退按钮、书签菜单等。
浏览器引擎:在用户界面和呈现引擎之间传送指令。
呈现引擎:又叫渲染引擎或叫浏览器内核,在线程方面又称为 UI 线程
网络:用于网络调用,比如 HTTP 请求。
用户界面后端:用于绘制基本的窗口小部件,UI 线程和 JS 共用一个线程。
JavaScript 解释器:用于解析和执行 JavaScript 代码
数据存储:这是持久层。浏览器需要在硬盘上存储各种数据,例如 cookie
# 1.3. 除 JavaScript 线程和 UI 线程之外的其他线程
- 浏览器事件触发线程
- 定时触发器线程
- 异步 HTTP 请求线程
# 1.4. 任务队列
- 1.所有的同步任务都在主线程上执行,形成一个执行栈
- 2.主线程之外,还存在一个任务队列。只要异步任务有了运行结果,就在任务队列中放置一个事件
- 一旦执行栈中所有的同步任务执行完毕,系统就会读取任务队列,看看里面又那些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行
- 主线程不断重复上面的第三部
# 1.5. Event Loop
主线程从任务队列中读取事件,这个过程是不断的,所以整个的这种运行机制又称为 Event Loop(事件循环)