浏览器渲染

157 阅读1分钟

前言

浏览器渲染进程有多个线程,GUI渲染线程,JS引擎线程,事件触发线程,定时器触发线程,异步http请求线程。JS是单线程工作的,同一个时间内只有一段js代码在运行。

js线程跟gui渲染线程是互斥的,当js引擎执行的时候,会将gui渲染线程挂起。如果js引擎执行一段耗时的代码,会阻塞gui进程渲染。因此提出了异步的概念,异步任务又分为宏任务和微任务。

同步任务在主线程上进行形成执行栈,当异步任务有结果时放在异步队列中,当同步任务执行结束,去异步队列中将任务提取到执行栈中执行,如此反复的过程,就称为事件循环。

宏任务

setTimeout,setInterval,ui渲染,script代码块

微任务

fetch,promise.then

JS线程阻塞UI线程

当js执行耗时操作,界面会卡死。此时可以采用一种技术webworker开一个新的线程,去跑耗时操作。

示例:codepen.io/11mingji11/…

引用