Eventloop淺述以及宏微任務執(zhí)行順序的實戰(zhàn)探討

? ? 在去年曾經做過一次分享名為<eventLoop狂歡>的對JS時間循環(huán)機制的簡述.而今過了一年,對前端又新增了部分理解.今天借著靚仔奶茶威脅之緣由,再來復習一下何謂eventloop.

對筆者有所懷疑的可以參考阮一峰大師的著作?http://www.ruanyifeng.com/blog/2013/10/event_loop.html?

基本阮大師的文章,文筆過人,才華橫溢,精致入微又振振有詞,一篇文章就足以對eventloop全貌就有基本的了解.

先看看阮大師筆下的定義:?


阮一峰的eventloop定義

然而筆者沒看.因為太長了.

本文只是基于筆者實踐才是檢驗真理的唯一標準這以觀念,來用實例闡述一下筆者眼中的eventloop.

在這里提及一下去年百度百科上的解釋,這也是去年我板書用的一個解釋:


百科解釋(已無法找到)


現(xiàn)在這個詞條在網上已經找不到了.主要原因就是這里提到的"先執(zhí)行宏任務,然后執(zhí)行微任務"這一點描述其實很有爭議,從宏觀上來說,如果把主程序當做一個很大的宏任務的時候,那么的確是"先宏后微",但是若論實際的可用來做開發(fā)實戰(zhàn)指導的,實際上是"先微后宏".可以用一個小例子來輕松舉證

new?Promise((resolve)?=>?{

??setTimeout(()?=>?{

????//?以下代碼點上可以看做同時將A與B壓入任務隊列

????//?將宏任務B入隊列

????setTimeout(()?=>?{

??????console.log('宏任務B執(zhí)行')

????},?0);

????//?將微任務A入隊列

????resolve()

????//?以上代碼時間點上可以看做同時將A與B壓入任務隊列

??},?1000);

}).then(()?=>?{

??console.log('微任務A執(zhí)行')

})

可以直接粘貼在瀏覽器或者在node中查看,結果都先執(zhí)行微任務A,再執(zhí)行宏任務B


可見在執(zhí)行順序上是微任務執(zhí)行優(yōu)先級 > 宏任務執(zhí)行優(yōu)先級

不過這只是一個比較粗淺的實踐理論,要究其根本為何會出現(xiàn)這種現(xiàn)象,主要還是要圍繞runTime的運行機制

以下這張圖可以比較好的詮釋在eventLoop中runTime到底干了什么


JS異步執(zhí)行圖解

但這個圖也是來源于網絡.無證之罪告訴我們,凡是與人相關的,都有一定的主觀性.不過對于實戰(zhàn)來說,這張圖解還是有相當?shù)囊饬x的.

首先eventloop的機制首先目的就是為了解決JS的異步規(guī)范問題.目前的規(guī)范是在同等條件下,微任務(主要是promise的then)會凌駕于其他異步任務的執(zhí)行.

在筆者的個人理解中,其實所謂的宏任務隊列與微任務隊列只是邏輯上的構造,執(zhí)行任務的順序,完全是取決于入棧條件的觸發(fā)先后.所謂的先微后宏,不過是因為在多個異步處理模塊中,微任務其實是類似于算作一個同步任務在處理,當resolve函數(shù)觸發(fā)的時候,會直接把.then函數(shù)直接入棧,而其他異步操作都有依賴于某個外部模塊進行,比如計時模塊,網絡IO模塊等等.

當然,這種假說是否是正確的,且待筆者下回深入機理,驗證解析.

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末信姓,一起剝皮案震驚了整個濱河市绸罗,隨后出現(xiàn)的幾起案子意推,更是在濱河造成了極大的恐慌,老刑警劉巖菊值,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異俊性,居然都是意外死亡,警方通過查閱死者的電腦和手機描扯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绽诚,“玉大人杭煎,你說我怎么就攤上這事∠鄄” “怎么了?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵儡毕,是天一觀的道長。 經常有香客問我腰湾,道長,這世上最難降的妖魔是什么费坊? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮附井,結果婚禮上讨越,老公的妹妹穿的比我還像新娘永毅。我一直安慰自己把跨,他們只是感情好卷雕,可當我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布节猿。 她就那樣靜靜地躺著漫雕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪峰鄙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天吟榴,我揣著相機與錄音,去河邊找鬼吩翻。 笑死兜看,一個胖子當著我的面吹牛狭瞎,可吹牛的內容都是我干的细移。 我是一名探鬼主播熊锭,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼弧轧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了精绎?” 一聲冷哼從身側響起速缨,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤代乃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后搁吓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體原茅,經...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡擎浴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贮预。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贝室。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡仿吞,死狀恐怖滑频,靈堂內的尸體忽然破棺而出唤冈,到底是詐尸還是另有隱情峡迷,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布绘搞,位于F島的核電站,受9級特大地震影響夯辖,放射性物質發(fā)生泄漏。R本人自食惡果不足惜董饰,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卒暂。 院中可真熱鬧啄栓,春花似錦也祠、人聲如沸昙楚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至崎场,卻和暖如春佩耳,著一層夾襖步出監(jiān)牢的瞬間谭跨,已是汗流浹背干厚。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工螃宙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛮瞄,地道東北人。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓挂捅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親堂湖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,576評論 2 349