cao死我好湿好紧好爽动态视屏|精选久久久久久久久久|中文无码精品一区二区三区四季|AAA国语精品刺激对白视频|

當(dāng)前位置:首頁 > 軟件開放 > 正文內(nèi)容

vue源碼全方位解析百度云(vue源碼分析視頻教程)

軟件開放2年前 (2023-02-14)1053

本篇文章給大家談?wù)剉ue源碼全方位解析百度云,以及vue源碼分析視頻教程對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。

本文目錄一覽:

【面試題解析】從 Vue 源碼分析 key 的作用

最近看了面試題中有一個這樣的題, v-for 為什么要綁定 key?

Vue 中 key 很多人都弄不清楚有什么作用,甚至還有些人認(rèn)為不綁定 key 就會報錯。

其實(shí)沒綁定 key 的話,Vue 還是可以正常運(yùn)行的,報警告是因為沒通過 Eslint 的檢查。

接下來將通過源碼一步步分析這個 key 的作用。

Virtual DOM 最主要保留了 DOM 元素的層級關(guān)系和一些基本屬性,本質(zhì)上就是一個 JS 對象。相對于真實(shí)的 DOM,Virtual DOM 更簡單,操作起來速度更快。

如果需要改變 DOM,則會通過新舊 Virtual DOM 對比,找出需要修改的節(jié)點(diǎn)進(jìn)行真實(shí)的 DOM 操作,從而減小性能消耗。

傳統(tǒng)的 Diff 算法需要遍歷一個樹的每個節(jié)點(diǎn),與另一棵樹的每個節(jié)點(diǎn)對比,時間復(fù)雜度為 O(n2)。

Vue 采用的 Diff 算法則通過逐級對比,大大降低了復(fù)雜性,時間復(fù)雜度為 O(n)。

VNode 更新首先會經(jīng)過 patch 函數(shù), patch 函數(shù)源碼如下:

vnode 表示更新后的節(jié)點(diǎn),oldVnode 表示更新前的節(jié)點(diǎn),通過對比新舊節(jié)點(diǎn)進(jìn)行操作。

1、vnode 未定義,oldVnode 存在則觸發(fā) destroy 的鉤子函數(shù)

2、oldVnode 未定義,則根據(jù) vnode 創(chuàng)建新的元素

3、oldVnode 不為真實(shí)元素并且 oldVnode 與 vnode 為同一節(jié)點(diǎn),則會調(diào)用 patchVnode 觸發(fā)更新

4、oldVnode 為真實(shí)元素或者 oldVnode 與 vnode 不是同一節(jié)點(diǎn),另做處理

接下來會進(jìn)入 patchVnode 函數(shù),源碼如下:

1、vnode 的 text 不存在,則會比對 oldVnode 與 vnode 的 children 節(jié)點(diǎn)進(jìn)行更新操作

2、vnode 的 text 存在,則會修改 DOM 節(jié)點(diǎn)的 text

接下來在 updateChildren 函數(shù)內(nèi)就可以看到 key 的用處。

key 的作用主要是給 VNode 添加唯一標(biāo)識,通過這個 key,可以更快找到新舊 VNode 的變化,從而進(jìn)一步操作。

key 的作用主要表現(xiàn)在以下這段源碼中。

updateChildren 過程為:

1、分別用兩個指針(startIndex, endIndex)表示 oldCh 和 newCh 的頭尾節(jié)點(diǎn)

2、對指針?biāo)鶎?yīng)的節(jié)點(diǎn)做一個兩兩比較,判斷是否屬于同一節(jié)點(diǎn)

3、如果4種比較都沒有匹配,那么判斷是否有 key,有 key 就會用 key 去做一個比較;無 key 則會通過遍歷的形式進(jìn)行比較

4、比較的過程中,指針往中間靠,當(dāng)有一個 startIndex endIndex,則表示有一個已經(jīng)遍歷完了,比較結(jié)束

從 VNode 的渲染過程可以得知,Vue 的 Diff 算法先進(jìn)行的是同級比較,然后再比較子節(jié)點(diǎn)。

子節(jié)點(diǎn)比較會通過 startIndex、endIndex 兩個指針進(jìn)行兩兩比較,再通過 key 比對子節(jié)點(diǎn)。如果沒設(shè)置 key,則會通過遍歷的方式匹配節(jié)點(diǎn),增加性能消耗。

所以不綁定 key 并不會有問題,綁定 key 之后在性能上有一定的提升。

綜上,key 主要是應(yīng)用在 Diff 算法中,作用是為了更快速定位出相同的新舊節(jié)點(diǎn),盡量減少 DOM 的創(chuàng)建和銷毀的操作。

希望以上內(nèi)容能夠?qū)Ω魑恍』锇橛兴鶐椭?,祝大家面試順利?/p>

Vue 的文檔中對 key 的說明如下:

關(guān)于就地修改,關(guān)鍵在于 sameVnode 的實(shí)現(xiàn),源碼如下:

可以看出,當(dāng) key 未綁定時,主要通過元素的標(biāo)簽等進(jìn)行判斷,在 updateChildren 內(nèi)會將 oldStartVnode 與 newStartVnode 判斷為同一節(jié)點(diǎn)。

如果 VNode 中只包含了文本節(jié)點(diǎn),在 patchVnode 中可以直接替換文本節(jié)點(diǎn),而不需要移動節(jié)點(diǎn)的位置,確實(shí)在不綁定 key 的情況下效率要高一丟丟。

某些情況下不綁定 key 的效率更高,那為什么大部分Eslint的規(guī)則還是要求綁定 key 呢?

因為在實(shí)際項目中,大多數(shù)情況下 v-for 的節(jié)點(diǎn)內(nèi)并不只有文本節(jié)點(diǎn),那么 VNode 的字節(jié)點(diǎn)就要進(jìn)行銷毀和創(chuàng)建的操作。

相比替換文本帶來的一丟丟提升,這部分會消耗更多的性能,得不償失。

了解了就地修改,那么我們在一些簡單節(jié)點(diǎn)上可以選擇不綁定 key,從而提高性能。

如果你喜歡我的文章,希望可以關(guān)注一下我的公眾號【前端develop】

Vue3入口文件解析

vue作為漸進(jìn)式的前端框架,當(dāng)我們僅僅在H5頁面中輕量引入的時候會這樣寫:

const { createApp, reactive} = Vue;

那么我們是如何導(dǎo)出這些對象的呢?讓我們來看一下 vue.global.js 文件源碼:

看懂了這個函數(shù),其實(shí)也就明白了我們是怎么獲取到對象的,這其實(shí)是一個 立即加載函數(shù) 。

手把手教你讀Vue2源碼-2

在上一篇中,我們已經(jīng)學(xué)習(xí)了怎么搭建環(huán)境和查找入口文件、vue初始化方法

這一篇,我們就來學(xué)習(xí)基本的調(diào)試方法,在上篇中,我們已經(jīng)在test文件夾中創(chuàng)建了一個測試文件,我們在瀏覽器中打開這個文件

1. 初始化new Vue()

test1.html文件中在初始化app處打斷點(diǎn),按F11走下一步查看,可以看到進(jìn)入到我們Vue構(gòu)造函數(shù),調(diào)用了init方法

2. this.init(options)

同樣打上斷點(diǎn),點(diǎn)擊下一步,會進(jìn)入init方法

3. this.initMixin

在init方法,初始化了各種屬性。我們將斷點(diǎn)打在合并options的位置,查看一下options合并前后有什么差別:

4. $mount

繼續(xù),將斷點(diǎn)打到mount方法

5. mountComponent

聲明了updateComponent,創(chuàng)建了Watcher

6. _render()

_render獲取虛擬dom

7. _update()

_update把虛擬dom轉(zhuǎn)為真實(shí)dom

關(guān)于vue源碼全方位解析百度云和vue源碼分析視頻教程的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

掃描二維碼推送至手機(jī)訪問。

版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請注明出處。

本文鏈接:http://m.smallwaterjetsystem.com/post/8385.html

“vue源碼全方位解析百度云(vue源碼分析視頻教程)” 的相關(guān)文章

廣州軟件開發(fā)(廣州軟件開發(fā)公司)

廣州軟件開發(fā)(廣州軟件開發(fā)公司)

今天給各位分享廣州軟件開發(fā)的知識,其中也會對廣州軟件開發(fā)公司進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、廣州手機(jī)app軟件開發(fā)公司排名哪家好?希望推薦有經(jīng)驗的~~謝謝了 2、廣州有哪些好的軟件開發(fā)公司? 3、廣州軟件開發(fā)公司一般工資多少? 4...

東北網(wǎng)紅小橙子爸爸封號了嗎(東北網(wǎng)紅小橙子爸爸封號了嗎知乎)

東北網(wǎng)紅小橙子爸爸封號了嗎(東北網(wǎng)紅小橙子爸爸封號了嗎知乎)

今天給各位分享東北網(wǎng)紅小橙子爸爸封號了嗎的知識,其中也會對東北網(wǎng)紅小橙子爸爸封號了嗎知乎進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、小橙子是干什么的? 2、哈爾濱小橙子先生的爸爸是做什么工作的? 3、小橙子爸爸怎么死的 4、2歲小橙子爸爸是干...

云攝影照片直播平臺(云攝影照片直播平臺下載)

云攝影照片直播平臺(云攝影照片直播平臺下載)

本篇文章給大家談?wù)勗茢z影照片直播平臺,以及云攝影照片直播平臺下載對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、享像派云攝影App能連接Sony A7M3進(jìn)行照片直播嗎?用Wifi還是OTG數(shù)據(jù)線? 2、享像派云攝影照片直播,需要買硬件設(shè)備嗎? 3、用享像派云攝影...

微信怎樣制作生日祝福(微信怎樣制作生日祝福表情)

微信怎樣制作生日祝福(微信怎樣制作生日祝福表情)

今天給各位分享微信怎樣制作生日祝福的知識,其中也會對微信怎樣制作生日祝福表情進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、給好朋友生日快樂微信祝福語 2、怎么用微信表情符號拼出生日快樂花樣的圖案 3、微信怎么自動零點(diǎn)發(fā)生日祝福 給好朋友生日快樂微...

租人陪玩app(租人陪玩需要提前看一下照片嗎)

租人陪玩app(租人陪玩需要提前看一下照片嗎)

今天給各位分享租人陪玩app的知識,其中也會對租人陪玩需要提前看一下照片嗎進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、陪玩軟件哪個最好 2、現(xiàn)在哪個陪玩軟件人多 3、你用過哪些陪玩app?最推薦的是哪一個? 4、有便宜的游戲陪玩app推薦嗎?...

北京市第六十五中學(xué)官方網(wǎng)站(北京市第六十五中學(xué)官方網(wǎng)站首頁)

北京市第六十五中學(xué)官方網(wǎng)站(北京市第六十五中學(xué)官方網(wǎng)站首頁)

今天給各位分享北京市第六十五中學(xué)官方網(wǎng)站的知識,其中也會對北京市第六十五中學(xué)官方網(wǎng)站首頁進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、北京65中是重點(diǎn)學(xué)校嗎?市級的或區(qū)級的都行 2、65中錄取分?jǐn)?shù)線2022 3、急求(1個小時內(nèi)):北京個區(qū)縣的普通...