返回
前端异步调度的关键——微任务和宏任务
前端
2023-10-28 02:22:19
前端开发中,异步任务是指不阻塞当前线程的任务,它允许浏览器继续执行其他任务,而不会等待异步任务完成。微任务和宏任务是两种常见的异步任务类型,它们在执行优先级和处理方式上有所不同。本文将介绍微任务和宏任务的概念,并通过代码示例详细解释它们的执行顺序和处理过程,帮助前端开发者更深入地理解异步调度机制。
微任务和宏任务的概念
微任务是浏览器在执行完所有同步任务后立即执行的任务,它包括:
- Promise.then() 和 async/await
- MutationObserver
- Object.observe()
- MessageChannel
宏任务是浏览器在执行完所有微任务后执行的任务,它包括:
- setTimeout()
- setInterval()
- setImmediate()
- requestAnimationFrame()
- I/O操作(如网络请求、文件读取等)
微任务和宏任务的执行顺序
微任务和宏任务的执行顺序遵循以下规则:
- 浏览器先执行所有同步任务。
- 浏览器执行所有微任务。
- 浏览器执行所有宏任务。
微任务和宏任务的处理方式
微任务和宏任务的处理方式有所不同。微任务是在主线程中执行的,而宏任务是在新的线程中执行的。这意味着微任务的执行速度要比宏任务快。
代码示例
以下代码示例演示了微任务和宏任务的执行顺序:
console.log('同步任务1');
Promise.resolve().then(() => {
console.log('微任务1');
});
setTimeout(() => {
console.log('宏任务1');
}, 0);
console.log('同步任务2');
Promise.resolve().then(() => {
console.log('微任务2');
});
setTimeout(() => {
console.log('宏任务2');
}, 0);
console.log('同步任务3');
输出结果:
同步任务1
同步任务2
同步任务3
微任务1
微任务2
宏任务1
宏任务2
从输出结果可以看出,同步任务先执行,然后是微任务,最后是宏任务。微任务的执行速度要比宏任务快。
总结
微任务和宏任务是前端开发中两种常见的异步任务类型,它们在执行优先级和处理方式上有所不同。微任务是在主线程中执行的,而宏任务是在新的线程中执行的。这意味着微任务的执行速度要比宏任务快。