消息队列和事件循环
Chunbin Lv3

线程模型

解析:

  1. 渲染主进程循环从消息队列中取任务出来执行
  2. IO进程往消息队列中插入数据

注:消费者生产者模型

需要解决的问题

如何处理高优先级的任务

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

如何解决单个任务执行时长过久

js因执行时间过长,占用了动画单帧的时间,这样会给用户卡顿的感觉。
针对这种情况,js可以通过回调功能来规避这种问题,就是让要执行的js任务滞后执行。

如何观察浏览器页面

浏览器打开开发者工具,
点击“Performance”标签,选择左上角的“start porfiling and load page”来记录整个页面加载过程中的事件执行情况。
知识点:在执行 Parse HTML 的时候,如果遇到 JavaScript 脚本,那么会暂停当前的 HTML 解析而去执行 JavaScript 脚本

由 Hexo 驱动 & 主题 Keep
访客数 访问量