淺析EventLoop

在了解EventLoop之前,我們需要知道什么

  1. javaScript是單線程。
  2. javaScript任務可以分為同步任務和異步任務
    作為一個單線程語言,執(zhí)行同步任務,自然是沒有問題,那么,他又是如何執(zhí)行異步任務的呢?這里就用到了我們要說的EventLoop。

什么是EventLoop

EventLoop又稱事件循環(huán)機制,是瀏覽器或者Node為了防止JavaScript在單線程在單線程運行時發(fā)生阻塞的一種事件機制。

javaScript任務隊列

想要了解EventLoop究竟是如何工作的,我們首先還要了解javaScript的事件隊列。
我們可以理解為我們的代碼是一個任務隊列,他由同步任務和異步任務構成,
因為javaScript單線程的特點,所以所有的任務只能一個一個執(zhí)行,前一個任務結束,后一個任務開始,這就是我們前面說到的同步任務,當然還有另外一種任務,比如后端的數(shù)據(jù)請求,如果數(shù)據(jù)量大,后端返回運行的邏輯復雜,就會導致數(shù)據(jù)返回的很慢,這樣一來,如果后面的任務一直等著,就會造成任務的阻塞,所以我們需要將返回慢的暫時掛起,然后先執(zhí)行后面的事件,這也就是我們上面說的異步任務。

微任務與宏任務

這是EventLoop的重點,宏任務與微任務:
宏任務(MacroTask,也成Task):script(整體代碼)、setTimeout、setInterval、I\O、UI交互事件、postMessageChannel、setImmediate
微任務(MircoTask):Promise.then、Object.observe、MutaionObserver、process.nextTick
他們的簡單執(zhí)行過程:
先執(zhí)行一個宏任務,然后如果遇到微任務就把微任務放到微任務列表中,然后等宏任務執(zhí)行完成,執(zhí)行所有微任務,當微任務全部執(zhí)行完成之后可以視為當前宏任務已經執(zhí)行完成,然后進行瀏覽器渲染,渲染完成后開啟下一個宏任務。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容