【JavaScript】浏览器与事件循环

浏览器的进程模型

主要包含:浏览器进程、网络进程、渲染进程;

一个进程就是一块内存空间;

进程:操作系统资源分配的基本单位,每一个进程都拥有独立的内存空间和系统资源,可以独立运行;

线程:操作系统任务调度和执行的基本单位;

渲染进程

1、会启动一个渲染主线程(执行js、渲染页面),处理html、css、js

2、主要线程:其中js、渲染线程是只能进行一个;

  • JS引擎线程(在主线程中,执行JS代码)
  • GUI渲染线程(在主线程中,解析HTML,CSS,构建DOM树和RenderObject树,布局和绘制等)
  • 事件触发线程(控制事件循环,当事件被触发,将异步任务或者某些触发事件如:click等放入事件队列中,等待JS引擎执行)
  • 定时器线程(处理settimeout和settimeinterval)
  • 异步HTTP请求线程(负责发起http网络请求,当请求完成后将事件放入事件队列中,等待JS引擎执行)

3、无限循环(又叫消息循环、事件循环)去消息队列(message queue)中拿任务(js代码);没有任务会休眠;执行 JS 时遇到其他线程可以做的事(如定时器、网络请求、监听事件、修改页面等),调用其他线程执行,其中异步线程的执行异步任务并在执行完结束后将回调添加到消息队列尾部,属于渲染线程的就直接放到队列中,等待主线程把当前同步任务执行完去循环队列,若此时主线程休眠,则唤醒渲染主线程进行循环;

4、优先级

任务没有优先级按先后顺序,队列有优先级,同一类型的任务放在相同的队列,如谷歌有延时队列、交互队列、微队列等,浏览器循环时可以从不同队列中获取任务,其中微队列优先级最高;

相关推荐
Watermelo61711 分钟前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
一个处女座的程序猿O(∩_∩)O2 小时前
小型 Vue 项目,该不该用 Pinia 、Vuex呢?
前端·javascript·vue.js
燃先生._.8 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
高山我梦口香糖9 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
black^sugar10 小时前
纯前端实现更新检测
开发语言·前端·javascript
2401_8576009512 小时前
SSM 与 Vue 共筑电脑测评系统:精准洞察电脑世界
前端·javascript·vue.js
2401_8576009512 小时前
数字时代的医疗挂号变革:SSM+Vue 系统设计与实现之道
前端·javascript·vue.js
GDAL12 小时前
vue入门教程:组件透传 Attributes
前端·javascript·vue.js
小白学大数据12 小时前
如何使用Selenium处理JavaScript动态加载的内容?
大数据·javascript·爬虫·selenium·测试工具