欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue $nextTick實(shí)現(xiàn)原理深入詳解

 更新時(shí)間:2023年10月08日 10:43:40   作者:光法V3  
這篇文章主要介紹了vue $nextTick實(shí)現(xiàn)原理深入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

簡介

鑒于一些朋友想學(xué)習(xí) vue2 源碼,但一看到源碼就頭痛(比如在下...),這里本著能給別人講會,自己就能學(xué)會的態(tài)度,想開一個(gè)專題,旨在用最簡單的代碼 讓感興趣的朋友了解一些源碼的設(shè)計(jì)思路(重在思路)。當(dāng)然受限于在下技術(shù)水平,若有歧義或不正確的地方還望大佬們及時(shí)指正。

這一節(jié)主要講一下$nextTick 如何實(shí)現(xiàn)的

nextTick 的作用

我們看一下這一段代碼

當(dāng)我們進(jìn)入頁面后 根據(jù)雙向綁定原理(當(dāng)然我們還沒講,如果這個(gè)文章反應(yīng)好后面會補(bǔ)上)的知識 num 每次執(zhí)行++ 時(shí),其 setter 方法都會執(zhí)行一次,而每次執(zhí)行 setter 時(shí),都會觸發(fā) watcher 的更新 dom 方法,那執(zhí)行下來,dom 就會被更新 10000 次,很明顯這樣就太低效了。

經(jīng)過簡單思考我們就可以想到,雖然 num 被更新了 10000 次,但我們實(shí)際只想在最后一次更新后,執(zhí)行 dom 的更新,那就意味著想要提升性能,dom 更新就不能是同步的,而應(yīng)該等每次代碼執(zhí)行完畢后,把所有收集到的 watcher 進(jìn)行去重,如演示代碼中,應(yīng)該在每次執(zhí)行 num 的 setter 后,先把觸發(fā)的 watcher 存入隊(duì)列,等代碼執(zhí)行完畢后,對收集到的 watcher 進(jìn)行去重,這里就只保留最后一次的 watcher 更新 dom 即可。

nextTick 的簡單實(shí)現(xiàn)

解析

  • (1)首先,nextTick 函數(shù)將回調(diào)函數(shù)封裝在一個(gè)新的函數(shù)中,并將該封裝函數(shù)推入 callbacks 數(shù)組中。
  • (2)然后,它會檢查 pending 的狀態(tài),如果為 false,則表示當(dāng)前沒有執(zhí)行異步更新任務(wù),需要進(jìn)行異步更新。
  • (3)在異步更新中,它會根據(jù)瀏覽器支持情況選擇使用宏任務(wù)(macro task)或微任務(wù)(micro task)。
    如果瀏覽器支持宏任務(wù),macroTimerFunc 函數(shù)會被調(diào)用,將異步更新任務(wù)推入宏任務(wù)隊(duì)列中,以便在下一個(gè)宏任務(wù)執(zhí)行時(shí)執(zhí)行回調(diào)函數(shù)。
    如果瀏覽器不支持宏任務(wù),則會調(diào)用 microTimerFunc 函數(shù),將異步更新任務(wù)推入微任務(wù)隊(duì)列中,以便在下一個(gè)微任務(wù)執(zhí)行時(shí)執(zhí)行回調(diào)函數(shù)。
  • (4)最后,如果回調(diào)函數(shù)為 undefined,并且當(dāng)前環(huán)境支持 Promise,則會返回一個(gè) Promise 對象,以便可以使用 await 或 .then() 等方式等待回調(diào)函數(shù)執(zhí)行完成。

以上就是vue $nextTick實(shí)現(xiàn)原理深入詳解的詳細(xì)內(nèi)容,更多關(guān)于vue $nextTick實(shí)現(xiàn)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue基于websocket實(shí)現(xiàn)智能聊天及吸附動(dòng)畫效果

    vue基于websocket實(shí)現(xiàn)智能聊天及吸附動(dòng)畫效果

    這篇文章主要介紹了vue基于websocket實(shí)現(xiàn)智能聊天及吸附動(dòng)畫效果,主要功能是基于websocket實(shí)現(xiàn)聊天功能,封裝了一個(gè)socket.js文件,使用Jwchat插件實(shí)現(xiàn)類似QQ、微信電腦端的功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Avue?組件庫的使用初體驗(yàn)

    Avue?組件庫的使用初體驗(yàn)

    這篇文章主要為大家介紹了Avue?組件庫的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Vue項(xiàng)目中Websocket的使用實(shí)例

    Vue項(xiàng)目中Websocket的使用實(shí)例

    WebSocket就誕生了,它最大特點(diǎn)就是服務(wù)器可以主動(dòng)向客戶端推送信息,客戶端也可以主動(dòng)向服務(wù)器發(fā)送信息,是真正的雙向平等對話,下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目中Websocket使用的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • vue如何使用vant組件的field組件disabled修改默認(rèn)樣式

    vue如何使用vant組件的field組件disabled修改默認(rèn)樣式

    這篇文章主要介紹了vue如何使用vant組件的field組件disabled修改默認(rèn)樣式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue+vant實(shí)現(xiàn)購物車全選和反選功能

    vue+vant實(shí)現(xiàn)購物車全選和反選功能

    這篇文章主要為大家詳細(xì)介紹了vue+vant實(shí)現(xiàn)購物車全選和反選功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • vue中使用ueditor富文本編輯器

    vue中使用ueditor富文本編輯器

    這篇文章主要介紹了vue中使用ueditor富文本編輯器的相關(guān)資料,需要的朋友可以參考下
    2018-02-02
  • vue-admin-box第一步npm?install時(shí)報(bào)錯(cuò)的處理

    vue-admin-box第一步npm?install時(shí)報(bào)錯(cuò)的處理

    這篇文章主要介紹了vue-admin-box第一步npm?install時(shí)報(bào)錯(cuò)的處理方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 使用vite發(fā)布app存在的所有問題解決方法

    使用vite發(fā)布app存在的所有問題解決方法

    最近項(xiàng)目中使用了vue3+vite開發(fā)一個(gè)App項(xiàng),下面這篇文章主要給大家介紹了關(guān)于使用vite發(fā)布app存在的所有問題的解決方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • vue3中使用router4 keepalive的問題

    vue3中使用router4 keepalive的問題

    這篇文章主要介紹了vue3中使用router4 keepalive的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue使用csp的簡單示例

    vue使用csp的簡單示例

    Vue是一套用于構(gòu)建用戶界面的漸進(jìn)式框架,與其它大型框架不同的是,Vue被設(shè)計(jì)為可以自底向上逐層應(yīng)用,下面這篇文章主要給大家介紹了關(guān)于vue使用csp的相關(guān)資料,需要的朋友可以參考下
    2022-08-08

最新評論