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

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

Vue nextTick的原理解析

瀏覽:24日期: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久久,三上悠亚国产精品一区二区三区
国产在线成人| 婷婷久久免费视频| 精品国产精品久久一区免费式 | 欧美成人精品三级网站| 精品国产乱码久久久| 福利片在线一区二区| 成人影视亚洲图片在线| 国产伦久视频在线观看| 四虎影视精品| 国产亚洲精品自拍| 综合五月婷婷| 日韩激情一二三区| 国产精品美女午夜爽爽| 国内自拍视频一区二区三区| 日韩深夜视频| 亚洲欧洲日本mm| 亚洲综合国产| 欧美日韩精品一区二区三区视频 | 精品入口麻豆88视频| 精品视频在线你懂得| 97精品一区| 激情丁香综合| 亚洲精选久久| 国产精品国码视频| 精品国产欧美| 日韩不卡视频在线观看| 欧美日韩少妇| 日韩精品免费视频一区二区三区| 欧美激情aⅴ一区二区三区 | 欧美a在线观看| 国产欧美一区二区三区精品酒店| 999久久久精品国产| 丝瓜av网站精品一区二区 | 日韩区欧美区| 黄色网一区二区| 91日韩欧美| 午夜日韩在线| 国产精品一区二区三区av麻| 日韩av首页| 日韩在线成人| 国产自产自拍视频在线观看| 婷婷亚洲五月色综合| 青草国产精品| 蜜桃精品在线| 日韩欧美三区| 六月婷婷综合| 亚洲资源网站| 免费高潮视频95在线观看网站| 久久福利影视| 国产日产精品一区二区三区四区的观看方式 | 日韩久久一区二区三区| 首页国产欧美久久| 久久一区亚洲| 午夜在线视频观看日韩17c| 国产精品一页| 日韩亚洲国产欧美| 国产美女亚洲精品7777 | 中文字幕在线看片| 亚洲制服一区| 里番精品3d一二三区| 一区视频在线| 国产福利亚洲| 久久亚洲影院| 日韩大片在线| 欧美视频久久| 人在线成免费视频| 日韩和欧美一区二区| 麻豆精品蜜桃| 欧美激情三区| 亚洲图片久久| av日韩中文| 国产欧美一区| 国产精品免费看| 中文字幕在线看片| 爽爽淫人综合网网站| 天堂√8在线中文| 欧美日本二区| 每日更新成人在线视频| 神马午夜在线视频| 国产激情欧美| 欧美一级全黄| 男女性色大片免费观看一区二区| 97精品在线| 国产日韩欧美在线播放不卡| 免费日韩av片| 99久久亚洲精品| 久久精品国产亚洲一区二区三区| 视频一区二区三区中文字幕| 黑森林国产精品av| 日本a级不卡| 国产美女一区| 99精品视频在线| 精品久久中文| 欧美精品1区| 91国内精品| 久久av一区| 久久在线视频免费观看| 成人一区不卡| 粉嫩av一区二区三区四区五区 | 久久精品国产一区二区| 青青草91久久久久久久久| 午夜视频精品| 99国产精品一区二区| 麻豆mv在线观看| 国产精品不卡| 精品午夜视频| 美女久久久精品| 国产极品久久久久久久久波多结野| 日本一区中文字幕| 日韩区欧美区| 亚洲久久在线| 亚洲精品一级| 色8久久久久| 亚洲另类黄色| 久久国产成人| 欧美精品激情| 伊人久久亚洲影院| 精品在线91| 欧美精品一二| 欧美精品一二| 午夜精品一区二区三区国产| 伊人久久大香线蕉av不卡| 日韩欧美字幕| 久久91导航| 亚洲成人av观看| 久久久久久久久久久9不雅视频| www.51av欧美视频 | 岛国av免费在线观看| 欧美激情99| 国产成人调教视频在线观看| 九九久久国产| 国产69精品久久| 午夜av成人| 午夜欧美精品久久久久久久| 欧美+日本+国产+在线a∨观看| 欧美日韩黑人| 丝袜美腿亚洲一区二区图片| 亚洲深深色噜噜狠狠爱网站| 亚洲精品人人| 日本aⅴ精品一区二区三区| 青草av.久久免费一区| 国产福利一区二区精品秒拍| 成人亚洲一区| 亚洲永久av| 亚洲国产影院| 伊人www22综合色| 国产欧美啪啪| 成人片免费看| 精品91久久久久| 亚洲日本免费电影| 久久xxx视频| 久久久水蜜桃av免费网站| 亚洲激情黄色| 日韩精品一级| 高清久久一区| 国产亚洲精品v| 欧美日韩亚洲三区| 国产精品久久久久久久久久10秀| 精品美女久久| 在线精品小视频| 日本不卡视频一二三区| 久久精品国产亚洲aⅴ| 91精品一区国产高清在线gif| 伊人成人在线视频| 国产日韩亚洲| 久久九九电影| 中文字幕日本一区| 国产精品毛片久久久| 欧美xxxx中国| 蜜乳av另类精品一区二区| 国产亚洲欧美日韩在线观看一区二区 | 91精品国产一区二区在线观看 | 蜜臀av免费一区二区三区| 日韩精品中文字幕吗一区二区| 国产91欧美| 免费成人性网站| 精品国产黄a∨片高清在线| 亚洲二区免费| 欧美日韩亚洲一区三区| 日韩国产网站| 日韩欧美中文字幕一区二区三区| 国产精品毛片久久久| 一区二区三区四区在线看| 欧美日韩夜夜| 国内精品福利| 蜜桃精品视频| 国产精品毛片一区二区三区| 国产精品一区亚洲| 亚洲成人日韩| 精品亚洲a∨一区二区三区18| 亚洲综合不卡| 精品国产黄a∨片高清在线| 一区二区三区四区精品视频| 欧美羞羞视频| 国产欧美日韩一区二区三区四区| 欧美1区2区3区| 国产午夜一区| 老鸭窝亚洲一区二区三区| 国产精品久久久久久久久久10秀| 亚洲精品自拍|