事件周期浏览器本身是一个复杂的系统。有很多事情要做,例如:执行JS代码,请求图片资源,分析CSS,渲染页面,对鼠标单击的响应等等。浏览器。这些模块反映在此过程中。
进一步划分该过程:
该单元仍然相对较大,并且可以进一步拆分多个线程。可以理解,页面上还有更多内容,您必须找到更多的弟弟要完成。特别是,渲染过程包括:
每个渲染过程都有一个主线程,主线程非常忙。有必要处理DOM,计算样式,也需要处理布局。同时,有必要处理JavaScript任务和各种输入事件。要允许在主线程中以有序的方式执行许多不同类型的任务,这需要一个系统来协调这些任务。整个调度系统是消息队列和事件周期。
有很多任务,只有一个人,任何时候只有一件事(在听班时不走路),该怎么做是排队
该任务存在于事件及其回调中。事件(用户单击,图片的成功加载)发生时,将添加到任务队列中;在完成主线程的任务完成后,将从任务队列中取出任务,称为EventLoop。
审查的要点:
想象一下,如果JS的任务已同步,那么在遇到计时器和网络请求时需要延迟执行的任务会发生什么?
该页面可能会瘫痪,需要暂停并等待这些代码需要很长时间才能执行。因此,引入异步任务。
异步任务可以细分为宏任务和micro -task。
脚本宏宏任务浏览器事件宏任务浏览器网络请求(ajax)宏任务浏览器settimeout()timer acro acro acro task browser / nodefs.readfile()read read file file act nodePromise.then()micro-micro-micro-midtrise browser / node
1
1,3,1000,2
新的Promise(函数(resolve){console.log(5)resolve()})。然后(function(){console.log(6)})settimeout(function(){console.log(7)新的Promise(funch(resolve){console.log(8)resolve()resolve()})。){console.log(9)})})console.log(10)
1,3,4,5,1000,2
})。(data => {console.log(data)})
console.log(3)
2、3、6,P1,P2,1,4,5