JavaScript 的任务调度机制是基于 事件循环(Event Loop) 的,它管理了不同类型的任务队列。总的来说,任务调度机制涉及到三种主要的任务队列:
- 同步任务(Synchronous Tasks)
- 微任务(Microtasks)
- 宏任务(Macrotasks)
在某些情况下,我们还可以提到 交互队列 和 延迟队列,它们可以视为宏任务的一部分。以下是它们的详细介绍、执行顺序和示例:
1. 同步任务(Synchronous Tasks)
- 同步任务是指代码中按顺序执行的任务。这些任务会先被执行,直到执行栈清空。
- 特点:同步任务是JavaScript执行的主要任务,必须按顺序执行,无法中断。
执行顺序:
- 同步任务先执行。
示例:
console.log('Start');
console.log('End');
输出顺序:
Start
End
2. 微任务(Microtasks)
微任务是指那些在同步任务执行完后、下一个宏任务开始前执行的任务。微任务的优先级比宏任务高,因此它们会在当前栈清空后立刻执行。
常见的微任务:
Promise
的.then()
、.catch()
、.finally()
回调queueMicrotask()
MutationObserver
执行顺序:
- 执行同步任务。
- 执行所有微任务,直到微任务队列清空。
- 然后才会开始执行宏任务。
示例:
console.log('Start');
setTimeout(() => {
console.log('Timeout 1');
}, 0);
Promise.resolve().then(() => {
console.log('Promise 1');
});
setTimeout(() => {
console.log('Timeout 2');
}, 0);
Promise.resolve().then(() => {
console.log('Promise 2');
});
console.log('End');
输出顺序:
Start
End
Promise 1
Promise 2
Timeout 1
Timeout 2
执行过程:
- 先执行同步代码:
Start
和End
。 - 然后执行微任务队列中的任务:
Promise 1
和Promise 2
。 - 最后执行宏任务队列中的任务:
Timeout 1
和Timeout 2
。
- 先执行同步代码:
3. 宏任务(Macrotasks)
宏任务包括所有的异步任务和UI更新任务。它们的执行顺序是按队列顺序来执行的,每次执行一个宏任务。
常见的宏任务:
setTimeout
、setInterval
I/O 操作
(例如文件读取、网络请求等)- 用户交互事件(点击、键盘输入等)
执行顺序:
- 执行同步任务。
- 执行所有微任务。
- 执行宏任务(例如
setTimeout
、事件监听等)。
示例:
setTimeout(() => {
console.log("Timeout 1");
}, 0);
setTimeout(() => {
console.log("Timeout 2");
}, 0);
console.log("Start");
输出顺序:
Start
Timeout 1
Timeout 2
执行过程:
- 先执行同步代码:
Start
。 - 然后执行宏任务队列中的任务:
Timeout 1
和Timeout 2
。
- 先执行同步代码:
4. 交互队列(Interaction Queue)
交互队列包含与用户交互相关的事件,如点击、输入框事件等。这些事件会作为宏任务的一部分,通常是在宏任务执行后、微任务执行前执行。
常见的交互队列事件:
click
、keydown
、input
等。
执行顺序:
- 宏任务中的异步任务完成后,事件循环会处理交互队列中的任务。
示例:
document.body.addEventListener('click', () => {
console.log('Click event');
});
执行过程:
- 用户点击页面后,点击事件会被加入到交互队列,并在下一轮事件循环中执行。
5. 延迟队列(Delayed Queue)
延迟队列实际上是宏任务队列的一部分,专门处理带有延迟时间的任务(如 setTimeout
和 setInterval
)。这些任务会在延迟时间到期后进入队列,并作为宏任务执行。
常见的延迟队列任务:
setTimeout
、setInterval
执行顺序:
- 延迟队列的任务是宏任务的一部分,会在当前宏任务执行完后、下一个宏任务之前执行。
示例:
setTimeout(() => {
console.log('Delayed Timeout');
}, 1000);
执行过程:
- 任务会在大约 1000 毫秒后被加入宏任务队列。
总结:JavaScript 任务调度机制的队列
JavaScript 主要通过事件循环管理不同的任务队列,每种队列的任务执行顺序如下:
- 同步任务:首先执行,执行栈中的代码。
- 微任务队列:在同步任务执行后、宏任务之前执行。优先级较高。
- 宏任务队列(包含延迟队列):在微任务执行完后执行。宏任务包含
setTimeout
、setInterval
等异步任务。 - 交互队列:处理与用户交互相关的事件,通常在宏任务和微任务之间执行。
执行流程:
- 执行同步任务。
- 执行所有微任务,直到微任务队列为空。
- 执行交互队列中的任务。
- 执行宏任务队列中的任务(如延迟队列中的
setTimeout
回调)。
示例总结:
console.log("Start");
setTimeout(() => {
console.log("Timeout 1");
}, 0);
Promise.resolve().then(() => {
console.log("Promise 1");
});
document.body.addEventListener('click', () => {
console.log("Click Event");
});
setTimeout(() => {
console.log("Timeout 2");
}, 0);
console.log("End");
输出顺序:
Start
End
Promise 1
Timeout 1
Click Event
Timeout 2
事件循环在处理任务时,会先执行同步代码,然后清空微任务队列,接着处理交互队列中的任务,再执行宏任务队列中的任务。
For latest information you have to pay a quick visit web and on world-wide-web I found this web
page as a finest site for newest updates.
I every time used to read piece of writing in news papers but now as I am a user of
web thus from now I am using net for content, thanks to web.
Good day! This post couldn't be written any better!
Reading through this post reminds me of my good old room mate!
He always kept talking about this. I will forward this write-up to him.
Pretty sure he will have a good read. Thank you for sharing!
Databases for Xrumer 23 ai Strong and GSA Search Engine Ranker with 12-month updates
We offer the best website databases for working with Xrumer 23 ai Strong and GSA Search Engine Ranker. The databases are suitable for a professional SEO company and creating hundreds of thousands of backlinks. Our databases are used by many SEO professionals from different countries of the world. The price for the databases is low, having bought them you receive updates for 12 months. You can read more and order a subscription to the databases here: https://dseo24.monster/vip-base-for-xrumer-and-gsa-ser/ On the site page you can choose any language of the pages.
We're a group of volunteers and starting a new scheme in our
community. Your site provided us with valuable info to work on. You have done a formidable job and our whole community
will be thankful to you.
Help me get 1000 subscribers - https://t.me/+8YD4vOIJpnk4ZmVh
In my channel I share information about promotion, marketing, crypto and personal life.
Thank you, good person!
Hebogs
Китайский производитель электромобилей BYD внедрил модернизированную систему помощи водителю для большинства своих моделей машин без дополнительных затрат, что привело его акции к новому пределу.
местные покупатели в настоящее время могут использовать брендовую систему помощи водителя система Глаз Бога автопроизводителя в машинах ценой всего лишь 69800 юаней ( 9555 USD).
Эксперты отмечают, что этот шаг сможет еще усилить разжечь жесткую ценовую конкуренцию в самом большом на мировом автомобильном рынке.
Согласно данным Refinitiv, ценные бумаги BYD подскочили более чем на 4% до нового предела, когда во вторник начались торги в Гонконге. В последний раз их акции покупались по 330 гонконгских USD (42 доллара).
2025 год будет первым годом умного управления для всех, — заявил глава BYD Ван на мероприятии в центре в Шэньчжэне в понедельник.
Ван предсказал, что интеллектуальное управление высокого класса станет неотъемлемой особенностью автомобилей, подобно ремням безопасности и подушкам безопасности, в течение будущих 3 лет.
Ранее система God’s Eye, преподнесенная в 2023 году для содействию в управлении транспортного средства, предлагалась только в автомобилях BYD ценой выше 30 000 долларов.
BYD заняла шестое место по мировым продажам автомобилей, а китайская Geely Auto оказалась на 10-й строчке, сказал Чуанфу на сцене, ссылаясь на данные Cailianshe, связанной с государством медиакомпании. Она также доминировала на местном рынке, на долю которой в 2024 году приходилось более 32% от всего объема продаж новых электрических автомобилей, по данным Китайской ассоциации легковых автомобилей.
Ту Ле, руководитель и директор консалтинговой компании Sino Auto Insights, заявил, что действия BYD ставят|заводят конкурентов на пятки из-за доступной цены.
Tesla, основной соперник BYD, выпустила похожие функции полного автономного вождения в США за ежемесячную оплату в размере 99 долларов в месяц или разовый взнос в размере 8000 USD. Компания ожидает одобрения контролирующих органов для старта тестирования на китайском рынке.
Данную новость опубликовало агентство Агентство новостей Агентство [url=https://dolson.ru]dolson.ru[/url]
Hello there, There's no doubt that your website
may be having browser compatibility issues. Whenever I look
at your web site in Safari, it looks fine however when opening in I.E.,
it's got some overlapping issues. I simply wanted to provide you with a quick heads up!
Besides that, wonderful website!