日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Vue2剝絲抽繭-響應式系統(tǒng)之NextTick

前置知識

dom 更新

瀏覽器中有一個 js 引擎線程執(zhí)行我們的 js 代碼,同時還有一個 GUI 渲染線程來進行繪圖,并且兩個線程是互斥的,只能交替著進行。

而dom 更新是在 js 線程中進行的,因此 dom 更新了并不代表我們就一定可以看到,只有當渲染線程把更新的 dom 繪制完畢我們才會看到。

簡單理解就是下邊的樣子:

舉一個極端的例子,如果我們在 js 線程里修改了 dom ,但某種原因使得 js 線程一直在執(zhí)行,沒有輪到渲染線程,那么我們就永遠看不到更新后 dom 了。

html 引入 bundle.js 。







Document






bundle.js 首先修改 dom ,然后執(zhí)行一個死循環(huán)。

document.getElementById("root").innerText = "hello";
while (true) {}

此時頁面就永遠是空白了。但事實上我們的 dom 已經(jīng)更新了,只是沒有輪到渲染線程展示出來。

只更新最后一次結果

在 js 線程中如果修改同一個 dom 元素,無論修改多少次,最終輪到渲染線程的時候,渲染線程當前讀到的 dom 是啥就會是啥。

document.getElementById("root").innerText = "hello";
document.getElementById("root").innerText = "hello2";
document.getElementById("root").innerText = "hello3";
document.getElementById("root").innerText = "liang";

上邊 dom 變化了多次,但屏幕上只會看到 liang。

宏任務微任務任務隊列

這里簡單說一下,不細講了。

  • 宏任務生成方式:script 標簽, setTimeout, setInterval 等
  • 微任務生成方式:Promise, MutationObserver 等。

js 線程中,通過

      1. <track id="v4dqu"></track>