浏览器常驻线程
- js引擎线程(解析执行js、用户输入、网络请求)
- GUI线程 (绘制用户界面、与js主线程是互斥的)
- http网络请求线程(处理用户的get、post请求,等返回结果后将回调函数推入任务队列)
- 定时触发器线程(setTimeout、setInterval等待时间结束后把执行函数推入任务队列中)
- 浏览器事件处理线程(将click、mouse等交互事件发生后将这些事件放入事件队列中)
GUI线程 与js主线程是互斥的
js可以操作DOM元素,进而会影响到GUI的渲染结果,因此js引擎线程与GUI线程是互斥的。也就是说当js引擎线程处于运行状态时,GUI线程将处于冻结状态。
js执行机制-单线程
同一时间只能做一件事
JavaScript是基于单线程运行的,同时又可以是异步执行的,一般来说这种既是单线程又是异步的语言都是基于事件来驱动的,恰好浏览器给JavaScript提供的这么一个环境;
大量数据操作
单线程计算能力有限,大量数据需要计算渲染的话,我们可以配合后端进行操作,SSR技术