宏任務和微任務和DOM渲染

1. GUI線程

GUI線程是瀏覽器線程之一,它的作用主要是以下幾點:

  • 解析html文檔生成DOM。
  • CSS代碼轉(zhuǎn)換為CSSOM。
  • 結合DOMCSSOM生成渲染樹。
  • 生成布局layout。
  • 將布局繪制paint在屏幕上。
屏幕刷新頻率

GUI線程渲染的結果不會立刻呈現(xiàn)在屏幕上,等屏幕刷新時才會呈現(xiàn)出來。屏幕刷新頻率一般60HZ,即16.6ms刷新一次屏幕。

2. JS事件循環(huán)與DOM渲染

DOM渲染是在GUI線程中處理的,在下次宏任務執(zhí)行前,GUI渲染線程開始工作,對頁面進行渲染。

事件循環(huán).png

JS引擎和GUI線程是互斥的,因為JS引擎可能頻繁修改DOM樣式,等一輪事件循環(huán)完畢之后再統(tǒng)一執(zhí)行GUI線程,這也是一種優(yōu)化手段。來看一道題來加深理解:

new Promise((resolve) => {
  resolve();
}).then((res) => {
  console.log("微任務");
});
console.log("同步任務");
for (i = 0; i < 2000000000; i++) {};
const box = document.getElementById("box");
box.style.backgroundColor = "blue";
setTimeout(() => {
  console.log("宏任務");
}, 0);

以上代碼的執(zhí)行流程是:

  1. 先執(zhí)行同步任務,輸出同步任務。
  2. 等待2000000000次循環(huán)執(zhí)行完畢。
  3. 輸出微任務。
  4. idbox的元素變成藍色。
  5. 輸出宏任務。
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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