js的事件循環(huán)和異步

聊聊js的異步

首先,聊異步,得先弄清楚為什么不用同步,用同步會有什么問題,我們先明確一點,js的執(zhí)行是單線程的,因為它是運行在瀏覽器渲染主線程中的,而渲染主線程只有一個。

如果同步的話,那么來一個計時器就得等多少秒才能執(zhí)行任務(wù),然后才能去執(zhí)行后面的代碼,非常浪費時間,而且渲染主線程不僅僅是用來執(zhí)行js的,還有很多其他的工作要做,比如解析html,css,計算樣式,布局,處理圖層,頁面每秒刷新60次等等.....

如果說使用同步的話,這些任務(wù)都得卡在那里,就會給用戶一種卡死的感覺,體驗很不好。

所以需要采用異步的方式處理js代碼。那么具體又是怎么操作的呢?這就涉及到了事件循環(huán)了。

闡述一下js的事件循環(huán)?

事件循環(huán)又叫消息循環(huán),是瀏覽器渲染主線程的工作方式

過去把消息隊列簡單的分為宏任務(wù)和微任務(wù)隊列兩種,但是這種說法已經(jīng)無法滿足這么復(fù)雜的瀏覽器環(huán)境,取而代之的是另一種更加靈活多變的處理方式

根據(jù)W3C官方的解釋,每個任務(wù)有不同的類型,同類型的任務(wù)必須在同一個隊列,不同類型的任務(wù)可以屬于不同的隊列,不同任務(wù)隊列有不同的優(yōu)先級,在一次事件循環(huán)中,由瀏覽器自己決定去取哪一個隊列的任務(wù)去執(zhí)行,但是呢,瀏覽器必須要有一個微任務(wù)隊列,并且該隊列的優(yōu)先級是最高的,必須最先調(diào)度執(zhí)行

事件循環(huán)是異步的實現(xiàn)方式

單線程是異步產(chǎn)生的原因

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容