消息队列和事件循环
线程模型

解析:
- 渲染主进程循环从消息队列中取任务出来执行
- IO进程往消息队列中插入数据
注:消费者生产者模型
需要解决的问题
如何处理高优先级的任务
典型场景:监控DOM节点的变化情况(节点的插入、修改、删除等),来处理相应的业务逻辑。
如果把这些DOM变化做成异步的消息事件,添加到消息队列的尾部,那么可能会处理不及时,影响实时性
。
如果采取同步的通知方式,会影响当前任务的执行效率
;为了权衡效率和实时性
,通常我们把消息队列中的任务称为宏任务
,每个宏任务都包含一个微任务队列
。
在执行宏任务的过程中,如果DOM有变化,会将该变化添加到微任务列表中,这样就不会影响到宏任务的继续执行,解决执行效率问题。
宏任务的主要功能都完成后,渲染引擎先执行当前宏任务中的微任务,解决实时性问题
如何解决单个任务执行时长过久

js因执行时间过长,占用了动画单帧的时间,这样会给用户卡顿的感觉。
针对这种情况,js可以通过回调功能来规避这种问题,就是让要执行的js任务滞后执行。
如何观察浏览器页面
浏览器打开开发者工具,
点击“Performance”标签,选择左上角的“start porfiling and load page”来记录整个页面加载过程中的事件执行情况。
知识点:在执行 Parse HTML 的时候,如果遇到 JavaScript 脚本,那么会暂停当前的 HTML 解析而去执行 JavaScript 脚本