日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Vue nextTick的原理解析

瀏覽:22日期:2022-09-30 14:45:25

使用過Vue的小伙伴們都知道,Vue里的nextTick可以獲取到更新后的DOM, 今天我就來講解下nextTick里面究竟做了什么?

開始講解前,我們需要知道了解一個概念,那就是Event Loop

Event Loop

Event Loop翻譯過來就是事件循環, 一個Event Loop會包括一個或多個task隊列,持續線程會從隊列中取出最早進入隊列的任務進行執行,被取出的任務就叫做macroTask(宏任務), 每個macroTask都有一個任務源, 每個macroTask處理完之后就從隊列中取出下一個時間最早進入的macroTask再重執行

任務源:

``` 1. script 2. 事件 3. Dom交互 4. I/O 5. UI Render 6. setTimeout 7. setInterval 8. requestAnimationFrame .....```

也就是說碰到以上幾種情況就會產生一個macroTask并且推入到隊列中

miscroTask(微任務)

執行完每個macroTask之后,主線程會去檢查該macroTask下的microTask是否為空,如果不為空,則按照時間順序從早到晚取出,如果途中有遇到新的microTask, 那么會繼續將該microTask推入到microTask隊列里

UI Render(重點)

伴隨著miscroTask隊列的清空,主線程就會執行UI Render, 也就是渲染界面,但是瀏覽器它并不會每次在UI Render任務下一定會渲染界面,視情況而言,現在主流瀏覽器一般都是按照60HZ 也就是16.7ms刷新頻率進行渲染(不是精確估量),一個macroTask通常是小于16.7ms, 所以瀏覽器每次會根據情況進行渲染

總結下一個循環

1. 從macroTask隊列里取出最早添加進去的2. 開始執行task, 途中如果遇到新的macroTask,就會將其添加到macroTask隊列的最后面3. 執行完macroTask之后,event loop會去尋找microTask隊列4. 同樣的道理,如果途中遇到新的microTask,將其放入該macroTask下的microTask隊列最后面5. 執行完microTask,會執行UI Render macroTask6. 瀏覽器會根據現有情況決定是否更新DOM,通常是按照60HZ的頻率去更新7. 至此,一個event loop結束了

nextTick

我們開始分析nextTick

Vue nextTick的原理解析

根據上圖我們看到nextTick的幾種寫法:

1. this.$nextTick(cb) 2. this.$nextTick().then(cb)

所有的cb都會被放入到callbacks數組里,等待一次性調用上圖中我們看到了主要是由timerFunc這個函數來進行調用回調, 那么我們下面來著重介紹這個函數,首先看下源碼

Vue nextTick的原理解析

我們可以看到timerFunc在不同情況下不同的賦值情況

首先會判斷瀏覽器是否支持promise屬性, 如果支持, timerFunc就會被賦值成Promise, 這里有個小小的問題,那就是在ios下,雖然是具備Pormise對象,并且會將它推入到microTask隊列里,但是隊列卻不會更新,這個時候需要添加一個macroTask來強制刷新microTask隊列

MutationObserver, 相信很多人并不清楚這個Api, 這是一個能夠監聽DOM變化的API,并且屬于microTask, 優先級低于Promise 在創建一個新的文本節點后,手動更改其文本節點來觸發microTask,

這里會有個小小的問題:

該文本節點渲染成功后,一定能代表其他的DOM渲染成功了嗎?

這是個備選方案, 主要還是因為它是一個微任務,所以才使用它,并不是因為它監聽了DOM

微任務都失敗后, 退而求其次,選擇setImmediate, 這是一個只有高版本IE和Edge瀏覽器才可能擁有的API, 其主要是用于計算大量數據的時候使用

最后就是setTimeout

看到這里,你會不會有疑惑?

上面的代碼并沒有說明nextTick是在監聽DOM更新后才執行的? What????當時腦袋就duang了一下

那么接下來說的就是重中之重

DOM Tree的更新是實時的,DOM Tree的更新是實時的,DOM Tree的更新是實時的, 重要的事說3遍, 這意味著你無需去監聽DOM 更新, 你對DOM的操作是能夠實時得到反饋的,上一行代碼操作了DOM,下一行就能獲取到

那么有人就會產生疑惑了, nextTick究竟是干嘛的?

nextTick的作用是將收集Watcher從隊列中一個個取出,并且更改數據,來一次性渲染DOM, 我們知道操作DOM的代價是昂貴的, 瀏覽器打開一個網頁后會開啟一個進程,進程是由線程組成的,

1. GUI渲染線程2. js引擎線程(主線程)3. EventLoop輪訓處理線程4. 其他線程,例如網絡

跨線程操作代價是昂貴的,所以做到一次性渲染Dom,可以有效的優化性能!!

總結

nextTick并不是用來監聽DOM變更,因為DOM變更是能夠實時獲取到的,它的作用是一次性更改數據,并且渲染DOM

以上就是Vue nextTick的原理解析的詳細內容,更多關于Vue nextTick的原理的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
激情综合网址| 激情久久五月| 欧美日中文字幕| 人人精品亚洲| 神马午夜久久| 婷婷综合激情| 一区视频在线| 亚洲欧洲日韩| 国产欧美在线| 久久久久久亚洲精品美女| 久久精品国产在热久久| 精品久久久久中文字幕小说| 91欧美在线| 欧美综合另类| 香蕉成人久久| 欧美性www| 精品国产乱码久久久久久樱花| 国产日韩欧美一区二区三区 | 国产精品一区二区中文字幕| 国产一级成人av| 久久精品资源| 亚洲成a人片| 激情五月色综合国产精品| 麻豆9191精品国产| 日韩精品亚洲专区| 国产毛片久久久| 久久这里只有| 欧美日韩视频免费观看| 中国女人久久久| 日韩精品视频一区二区三区| 日韩一区二区三区在线看| 午夜日韩福利| 欧美成人一二区| 777久久精品| 欧美日韩一区二区高清| 国产精品亚洲综合在线观看| 日韩午夜电影| 日韩av影院| 国产网站在线| 亚洲综合丁香| 久久av影院| 波多视频一区| 一区二区国产在线| 久久中文字幕一区二区| 久久久久久久久久久妇女| 视频一区二区不卡| 国产精品香蕉| 天堂资源在线亚洲| 日本色综合中文字幕| 亚洲天堂资源| 一区二区三区网站| 国产精品99久久精品| 久久性天堂网| 97国产成人高清在线观看| 久久电影一区| 国产精品99视频| 亚洲欧美日韩专区| 精品成人18| 亚洲三级av| 青青久久av| 欧美一级网址| 精品一区在线| 精品伊人久久久| 日韩影院在线观看| 日本一二区不卡| 日韩在线麻豆| 久久久人人人| 国产精品久久久久av蜜臀 | 国产精品xx| 亚洲午夜免费| 成人久久久久| 欧美a在线观看| 亚洲影院天堂中文av色| 日本欧美不卡| 麻豆精品一区二区综合av| 夜夜精品视频| 在线一区视频观看| 国产精品白丝一区二区三区| 亚洲黄页一区| 日本欧美国产| 国产剧情在线观看一区| 丝袜美腿一区二区三区| 国产精品一区高清| 亚洲一级少妇| 午夜亚洲一区| 国产亚洲一区二区三区不卡| 久久精品99久久无色码中文字幕| 日韩中文字幕亚洲一区二区va在线| 老鸭窝一区二区久久精品| 亚洲免费观看| 天堂√8在线中文| 美日韩一区二区三区| 日本欧美不卡| 国精品产品一区| 亚洲精品中文字幕99999| 欧美福利一区| 日韩av中文字幕一区| 日韩一区精品字幕| 亚洲精选av| 高清日韩中文字幕| 欧美日韩一区二区三区在线电影| 亚洲最新无码中文字幕久久| 综合国产视频| 91久久中文| 999精品一区| 电影亚洲精品噜噜在线观看| 国产精品视频一区二区三区四蜜臂| 在线精品国产亚洲| 黄色日韩在线| 欧美69视频| 欧美日中文字幕| 成人福利视频| 日韩成人精品一区二区| 麻豆国产一区| 欧美一级二级视频| 伊人久久一区| 一区二区不卡| 免费精品视频| 国产精品主播在线观看| 日本成人中文字幕| 视频一区中文字幕精品| 欧美精品一二| 五月综合激情| 美女黄网久久| 欧美啪啪一区| 久久精品国产999大香线蕉| 久久精品72免费观看| 91亚洲国产| 国产网站在线| 99久久精品网| 午夜在线视频观看日韩17c| 不卡一区2区| 国产精品亚洲人成在99www| 三级欧美韩日大片在线看| 激情综合自拍| 久久爱www成人| 日本在线高清| 中文字幕亚洲精品乱码| 久久久久久久久久久妇女| 欧美日一区二区| 在线亚洲欧美| 日韩精品中文字幕一区二区| 青青草伊人久久| 国产精品美女午夜爽爽| 久久免费影院| 国际精品欧美精品| 91av亚洲| 亚洲一区二区成人| 日韩一区中文| 精品国产不卡一区二区| 日韩一区电影| 欧美精品一二| 亚洲精品少妇| 国产精品自拍区| 麻豆视频在线看| 中文国产一区| 久久激情五月激情| 亚洲欧洲免费| 久久精品一区| 人人精品久久| 激情欧美丁香| 欧美国产另类| 中文字幕成人| 久久国产精品亚洲77777| 国产精品theporn| 噜噜噜躁狠狠躁狠狠精品视频| 成人va天堂| 精品亚洲自拍| 日韩理论视频| 精精国产xxxx视频在线野外| 亚洲不卡视频| 亚洲ab电影| 久久国产欧美| 中文av在线全新| 日本三级亚洲精品| 国产精品多人| 欧美亚洲国产日韩| 国产伊人久久| 亚洲一区国产| 久久中文字幕一区二区三区| 久久中文字幕二区| 日韩一二三区在线观看| 高清在线一区| 蜜桃免费网站一区二区三区| 成人在线超碰| 亚洲精品影视| 精品日韩视频| 国产亚洲观看| 久久网站免费观看| 国产日韩免费| 久久中文字幕av| 国产精品观看| 麻豆亚洲精品| 欧美日韩视频网站| 日韩高清欧美激情| 久久国产成人午夜av影院宅| 欧美有码在线| 午夜久久tv| 日韩av二区| 日本91福利区|