总体介绍
浏览器运行是多进程的,包括主进程、渲染进行、网络进程和GPU进程等等
解析HTML时(渲染进程)用到两大引擎,一个是渲染引擎(用于渲染页面)、一个是JS引擎用于解析JS代码。又JS引擎运行是单线程的,所以渲染和 js引擎是互斥的。这就要求提高JS引擎解析时间,防止长时间堵塞主线程,以提高渲染效率。异步就可用来解决此问题。
渲染引擎的线程运行
浏览器运行渲染进程先利用渲染引擎渲染页面,渲染过程如下:
JS引擎的线程运行
主线程中的任务先进入任务队列中给JS引擎解析,其他线程的任务(优先级如下图)的以回调任务进行队列待JS引擎解析。若JS代码改变了DOM树,渲染任务又进入任务队列中待渲染引擎执行。
主线程就监控检查任务队列中是否任务待执行,有就在主线程中执行,部分任务给其他线程运行(异步任务)【这些任务根据逻辑(如定时3s)将回调函数传到任务队列中,待主线程执行】