前言

众所周知,js是单线程的,就像我们不能一边刷牙一边洗脸(或许有些大佬真的可以),那么单线程如何才能规划调度好要做的任务呢?
这个时候就要介绍一下这个任务机制了~

任务种类

  • 宏任务

  • 微任务

注意:浏览器环境和node环境是不一样的,本文只讨论浏览器环境

规则

执行一个宏任务(先执行同步代码)-->执行所有微任务-->UI render-->执行下一个宏任务-->执行所有微任务-->UI render-->

根据HTML Standard,一轮事件循环执行结束之后,下轮事件循环执行之前开始进行UI render。即:macro-task任务执行完毕,接着执行完所有的micro-task任务后,此时本轮循环结束,开始执行UI render。UI render完毕之后接着下一轮循环。但是UI render不一定会执行,因为需要考虑ui渲染消耗的性能已经有没有ui变动

需要注意的是,微任务是有优先级的,就如同上面的表格从上往下一样,nextTick>Promise>MutationObserver.

  • 那么宏任务有没有优先级呢??

大部分浏览器会把DOM事件回调优先处理 因为要提升用户体验 给用户反馈,其次是network IO操作的回调,再然后是UIrender,之后的顺序就难以捉摸了,其实不同浏览器的表现也不太一样,这里不做过多讨论。

来道经典题目

console.log('script start');setTimeout(function() {console.log('setTimeout');
}, 0);Promise.resolve().then(function() {console.log('promise1');
}).then(function() {console.log('promise2');
});console.log('script end');

答案是
'script start'、'script end'、'promise1'、'promise2'、'setTimeout'
先走完所有同步代码-到promise微任务-宏任务setTimeout

深入浅出任务队列机制,非常浅相关推荐

  1. ajax机制 缓存,浅谈Ajax的缓存机制

    浅谈Ajax的缓存机制 Ajax的缓存机制和浏览器处理资源时的缓存机制是一样的. 三条简单规则: 只要是URL相同的GET请求,浏览器会使用缓存(当然还要看服务器的Cache-Control/Expi ...

  2. android深入浅出binder机制,Android深入浅出之Binder机制.pdf

    Android深入浅出之Binder机制 Android深入浅出之Binder机制 一 说明 Android系统最常见也是初学者最难搞明白的就是Binder了,很多很多的Service就是通过Bind ...

  3. python爬虫反爬机制_浅谈爬虫及绕过网站反爬取机制之Python深度应用

    我们中公优就业的老师希望能给那些面临困境的朋友们带来一点帮助!(相关阅读推荐:Python学习就看这里!) 爬虫是什么呢,简单而片面的说,爬虫就是由计算机自动与服务器交互获取数据的工具.爬虫的最基本就 ...

  4. 浅谈ASP.NET的内部机制(一)

    浅谈ASP.NET的内部机制(一) 前言:当一个Http请求发送给一个aspx页面时,服务器进行了哪些操作?又如何来解析这个请求?ASP.NET在接收请求后是怎么运行的,如怎么编译以及怎么样用托管的代 ...

  5. 浅谈ASP.NET内部机制(五)

    浅谈ASP.NET内部机制(五) 前言:本章要谈页面生命周期了,过程挺多的,但是一点都不难.不信可以看看.我尽量的讲的平实一些,而且理解页面的生命周期对喜欢开发自定义控件和组件的朋友是很有帮助的. 系 ...

  6. 浅谈ASP.NET的内部机制(二)

    浅谈ASP.NET的内部机制(二)         前言:大家知不知道,一个Http Request是如何被传递给ASP.NET的?而且ASP.NET是如何知道一个 Http Request是请求的. ...

  7. linux中的tasklet机制【转】

    转自:http://blog.csdn.net/yasin_lee/article/details/12999099 转自: http://www.kerneltravel.net/?p=143 中断 ...

  8. Linux内核的Softirq机制

    前言  中断服务程序往往都是在CPU关中断的条件下执行的,以避免中断嵌套而使控制复杂化.但是CPU关中断的时间不能太长,否则容易丢失中断信号.为此,Linux将中断服务程序一分为二,各称作" ...

  9. 中断处理的tasklet(小任务)机制-不过如此

    中断服务程序一般都是在中断请求关闭的条件下执行的,以避免嵌套而使中断控制复杂化.但是,中断是一个随机事件,它随时会到来,如果关中断的时间太长,CPU就不能及时响应其他的中断请求,从而造成中断的丢失.因 ...

最新文章

  1. FastThreadLocal吞吐量居然是ThreadLocal的3倍
  2. vue 设置输入法隐藏_原来iPhone自带的输入法这么强大?好多人都不知道其中的隐藏功能...
  3. CListCtrl 使用技巧
  4. 汇编语言Makefile
  5. java多线程通信基础(面向厕所编程)
  6. Linux crontab 定时任务命令详解
  7. Android驱动开发第三章随想
  8. [转]恢复 git reset -hard 的误操作
  9. 谷歌拼音输入法快速切换中英文解决中英文混合打字问题
  10. XenCenter的安装与使用
  11. C语言终极贪吃蛇代码,直接COPY上手。
  12. android加密技术框架,Android平台框架层hook技术的安全性研究
  13. Hive 核心原理(hive-3.1.2)(转载)
  14. Base64加密和解密使用
  15. margin: 0 auto;的作用
  16. 【STM32CubeMX安装】
  17. 惠普136w耗材贵吗_小成本高品质 惠普M136w激光一体机评测
  18. 学校计算机用房地面用什么材料,学校食堂地面防滑该用什么材料?
  19. 关于今天参加学校ACM比赛的感想
  20. 哈工大软件构造 Git使用

热门文章

  1. 3.对角线遍历(LeetCode第498题)
  2. 目标检测--DSOD: Learning Deeply Supervised Object Detectors from Scratch
  3. 【numpy】协方差计算
  4. Spring-Boot-Bean的使用,@Repository,@Service,@Controller,@Component
  5. mysql整形溢出报错_MySQL整型数据溢出的解决方法
  6. golang json 获取所有key_Golang —— JSON 大法
  7. java流程控制图_Java流程控制
  8. 2022年软件测试工具大全(自动化、接口、性能、安全、测试管理)
  9. sqlserver2008r2表复制原表_SQL Server 2008 R2 主从数据库同步
  10. 计算机应用房地产,房地产板块弱市吸金 逾30亿撤离计算机应用板块