?系列文章目錄
- 第一章?瀏覽器事件循環原理 —— 瀏覽器進程模型
- 第二章?瀏覽器事件循環原理 —— 渲染主線程如何工作?
- 第三章 瀏覽器事件循環原理 —— 何為異步?
- 第四章 瀏覽器事件循環原理 —— JS為何會阻礙渲染?
文章目錄
系列文章目錄
文章目錄
前言
總結
前言
該文章作用于 “web前端大師課” 的學習筆記,附上課程鏈接。
任務有優先級嗎
任務沒有優先級,在消息隊列中先進先出,但消息隊列是有優先級的
根據 W3C 的最新解釋
- 每個任務都有?個任務類型,同?個類型的任務必須在?個隊列,不同類型的任務可以分屬于不同的隊列。
-
在?次事件循環中,瀏覽器可以根據實際情況從不同的隊列中取出任務執?。
- 瀏覽器必須準備好?個微隊列,微隊列中的任務優先所有其他任務執?。
三大隊列
- 延時隊列:?于存放計時器到達后的回調任務,優先級「中」
- 交互隊列:?于存放?戶操作后產?的事件處理任務,優先級「?」
- 微隊列:?戶存放需要最快執?的任務,優先級「最?」
注:添加任務到微隊列的主要?式主要是使? Promise、MutationObserver
總結
任務在消息隊列中,先進先出,沒有優先級;但是消息隊列有三大類,微隊列、交互隊列、延時隊列,他們的優先級從高到低排列。微隊列是每個瀏覽器必須準備好的一個消息隊列,它的優先級是最高的;其次是交互隊列,w3c官方認為,用戶交互的事件要盡可能的及時反饋,所以他的優先級是除了微隊列最高的;最后則是延時隊列,一般setTimeout()等計時器的方法都放在這個隊列中,但是他的優先級是最低的,這也是 js 中?setTimeout() 的計時不是精確的原因之一,會有一些偏差。