摘要:微任務(wù)隊(duì)列的任務(wù)將在當(dāng)前輪次的事件輪詢中被推入微任務(wù)隊(duì)列而隊(duì)列中的任務(wù)必須等待下一輪時事件循環(huán)相關(guān)的文章
微任務(wù)隊(duì)列的任務(wù)將在當(dāng)前輪次的事件輪詢中被推入微任務(wù)隊(duì)列
而macrotask隊(duì)列中的任務(wù)必須等待下一輪時事件循環(huán)
macrotasks: setTimeout, setInterval, setImmediate, requestAnimationFrame, I/O, UI rendering
microtasks: process.nextTick, Promises, Object.observe, MutationObserver
when a task (in macrotask queue) is running,new events may be registered.So new tasks may be created.Below are two new created tasks:
promiseA.then()"s callback is a task
promiseA is resolved/rejected: the task will be pushed into microtask queue in current round of event loop.
promiseA is pending: the task will be pushed into microtask queue in the future round of event loop(may be next round)
setTimeout(callback,n)"s callback is a task,and will be pushed into macrotask queue,even n is 0;
task in microtask queue will be run in the current round,while task in macrotask queue has to wait for next round of event loop.
we all know callback of "click","scroll","ajax","setTimeout"... are tasks,however we should also remember js codes as a whole in script tag is a task(a macrotask) too.
相關(guān)的文章
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/110321.html
摘要:規(guī)范中定義了瀏覽器何時進(jìn)行渲染更新,了解它有助于性能優(yōu)化。結(jié)合一些資料,對上邊規(guī)范給出一些理解有誤請指正每個線程都有自己的。列為,列為,列為。我們都知道是單線程,渲染計(jì)算和腳本運(yùn)行共用同一線程網(wǎng)絡(luò)請求會有其他線程,導(dǎo)致腳本運(yùn)行會阻塞渲染。 本文轉(zhuǎn)自blog 轉(zhuǎn)載請注明出處 異步的思考 event loops隱藏得比較深,很多人對它很陌生。但提起異步,相信每個人都知道。異步背后的靠山就是...
摘要:事件循環(huán)了解了在引擎中是如何工作了之后,來看下如何使用異步回調(diào)函數(shù)來避免代碼。從回調(diào)函數(shù)被放入后秒鐘,把移到中。由于事件循環(huán)持續(xù)地監(jiān)測調(diào)用棧是否已空,此時它一注意到調(diào)用棧空了,就調(diào)用并創(chuàng)建一個新的調(diào)用棧。 聽多了JavaScript單線程,異步,V8,便會很想去知道JavaScript是如何利用單線程來實(shí)現(xiàn)所謂的異步的。我參考了一些文章,了解到一個很重要的詞匯:事件循環(huán)(Event L...
摘要:但是導(dǎo)致了很明顯的性能問題。上述兩個例子其實(shí)是在這個中找到的,第一個使用的版本是,這個版本的實(shí)現(xiàn)是采用了,而后因?yàn)榈睦锏挠校谑怯扔晗牧藢?shí)現(xiàn),換成了,也就是后一個所使用的。后來尤雨溪了解到是將回調(diào)放入的隊(duì)列。 結(jié)論 對于event loop 可以抽象成一段簡單的代碼表示 for (macroTask of macroTaskQueue) { // 1. Handle cur...
摘要:但是導(dǎo)致了很明顯的性能問題。上述兩個例子其實(shí)是在這個中找到的,第一個使用的版本是,這個版本的實(shí)現(xiàn)是采用了,而后因?yàn)榈睦锏挠校谑怯扔晗牧藢?shí)現(xiàn),換成了,也就是后一個所使用的。后來尤雨溪了解到是將回調(diào)放入的隊(duì)列。 結(jié)論 對于event loop 可以抽象成一段簡單的代碼表示 for (macroTask of macroTaskQueue) { // 1. Handle cur...
摘要:主線程在任務(wù)隊(duì)列中讀取事件,這個過程是循環(huán)不斷地,所以這種運(yùn)行機(jī)制叫做事件循環(huán)是在執(zhí)行棧同步代碼結(jié)束之后,下一次任務(wù)隊(duì)列執(zhí)行之前。 單線程 javascript為什么是單線程語言,原因在于如果是多線程,當(dāng)一個線程對DOM節(jié)點(diǎn)做添加內(nèi)容操作的時候,另一個線程要刪除這個DOM節(jié)點(diǎn),這個時候,瀏覽器應(yīng)該怎么選擇,這就造成了混亂,為了解決這類問題,在一開始的時候,javascript就采用單線...
閱讀 2457·2021-09-28 09:36
閱讀 3597·2021-09-22 15:41
閱讀 4382·2021-09-04 16:45
閱讀 1954·2019-08-30 15:55
閱讀 2846·2019-08-30 13:49
閱讀 824·2019-08-29 16:34
閱讀 2369·2019-08-29 12:57
閱讀 1679·2019-08-26 18:42