理解下浏览器运行机制,阅读本文之前请先自行了解js事件循环的原理
首先抛出几个问题
- 我们都知道js是单线程的,如果js在执行代码,那么setTimeout的这个间隔时间是有谁来计算的
- 在写css的时候我们常常会说启用GPU加速,那么GPU是什么?为什么能加速?
带着这几个问题,我们先往下看:浏览器的进程主要有下面几个
- Browser进程:负责浏览器界面交互,包括前进后退,tab打开关闭,资源下载等等等,还有最终将渲染好的视图会知道页面上也有这个进程负责。在浏览器只会有1个
- 第三方插件进程:为了避免插件奔溃导致页面奔溃,所以每个插件都会有1个进程
- GPU进程:只会有1个
- 渲染进程:就是我们经常打交道的,包括页面渲染,解析js脚本等等。一般来说每个tab页就会有1个渲染进程,但是浏览器会将相同tab页的进程合并,这也是避免了一个页面的carsh影响到其他页面
然后我们再来看看渲染进程又包含了哪些主要的线程
- js引擎线程:就是我们常说的js线程,js单线程指的就是他
- GUI渲染线程:这个就是UI线程
- 事件触发线程:这个线程来处事件循环队列
- 定时器触发线程:定时器处理所在的线程
- 异步http请求触发线程:处理ajax等异步请求的线程
前面2个线程都非常的好理解,那么我们来说说什么是事件触发线程
|
|
不管有几个线程参与,最终都是将事件插入到待执行队列的末尾,然后有js引擎线程来处理,这也就是js单线程的说法
浏览器的事件循环