自拍偷在线精品自拍偷|国产无码一区二区久久|最新版天堂资源中文官网|国产精品第一页爽爽影院|国产精品一区二区av不卡|久久久波多野av一区无码|国产欧美日本亚洲精品一4区|亚洲精品天堂在线观看2020

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

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

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

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

本文目錄一覽:

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

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

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

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

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

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

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

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

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

VNode 更新首先會(huì)經(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),則會(huì)調(diào)用 patchVnode 觸發(fā)更新

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

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

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

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

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

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

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

updateChildren 過程為:

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

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

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

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

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

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

所以不綁定 key 并不會(huì)有問題,綁定 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 未綁定時(shí),主要通過元素的標(biāo)簽等進(jìn)行判斷,在 updateChildren 內(nèi)會(huì)將 oldStartVnode 與 newStartVnode 判斷為同一節(jié)點(diǎn)。

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

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

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

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

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

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

Vue3入口文件解析

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

const { createApp, reactive} = Vue;

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

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

手把手教你讀Vue2源碼-2

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

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

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)擊下一步,會(huì)進(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://www.thonggone.com/post/8385.html

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

app軟件開發(fā)(app開發(fā)培訓(xùn))

app軟件開發(fā)(app開發(fā)培訓(xùn))

本篇文章給大家談?wù)刟pp軟件開發(fā),以及app開發(fā)培訓(xùn)對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、怎么開發(fā)app軟件? 2、app是如何制作的,APP如何開發(fā)? 3、app軟件開發(fā)怎么選擇 4、開發(fā)app需要什么技術(shù) 5、如何開發(fā)一款app軟件 6、...

紅盟發(fā)卡網(wǎng)源碼(紅盟發(fā)卡網(wǎng)源碼查詢)

紅盟發(fā)卡網(wǎng)源碼(紅盟發(fā)卡網(wǎng)源碼查詢)

今天給各位分享紅盟發(fā)卡網(wǎng)源碼的知識,其中也會(huì)對紅盟發(fā)卡網(wǎng)源碼查詢進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、發(fā)卡網(wǎng)源碼支付寶對接 2、如何創(chuàng)建一個(gè)自己的發(fā)卡網(wǎng)平臺,將其作為副業(yè)收入如何? 3、卡網(wǎng)網(wǎng)站怎么做 4、請問誰有網(wǎng)站自動(dòng)發(fā)卡平臺的源碼...

婚禮官網(wǎng)免費(fèi)源碼(婚禮網(wǎng)站模板)

婚禮官網(wǎng)免費(fèi)源碼(婚禮網(wǎng)站模板)

今天給各位分享婚禮官網(wǎng)免費(fèi)源碼的知識,其中也會(huì)對婚禮網(wǎng)站模板進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、2022年國內(nèi)景區(qū)婚禮怎么報(bào)名 2、如何查詢一個(gè)企業(yè)的官網(wǎng)頁面源代碼?如何設(shè)置關(guān)鍵字的優(yōu)化,線上 3、愛克絲文婚禮公司還在嗎 4、婚禮的電...

廣東省江門市開平橙子網(wǎng)(廣東省江門市開平市簡介)

廣東省江門市開平橙子網(wǎng)(廣東省江門市開平市簡介)

本篇文章給大家談?wù)剰V東省江門市開平橙子網(wǎng),以及廣東省江門市開平市簡介對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、開平橙子網(wǎng)上的二手手機(jī)可信嗎? 2、開平橙子網(wǎng),部落網(wǎng)各大論壇全被封了? 3、從白云機(jī)場到江門開平市,該怎么乘車? 4、廣東省開平市有哪幾間證券...

php開源博客系統(tǒng)(php 博客系統(tǒng))

php開源博客系統(tǒng)(php 博客系統(tǒng))

本篇文章給大家談?wù)刾hp開源博客系統(tǒng),以及php 博客系統(tǒng)對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、誰推薦一個(gè)好的個(gè)人博客源碼(PHP+MYSQL) 2、跪求一個(gè)好用的php blog源碼 3、php開發(fā)用什么軟件 4、類似WordPress的建站軟件還...

168開獎(jiǎng)極速賽車騙局全過程(168極速賽車開獎(jiǎng)的視頻)

168開獎(jiǎng)極速賽車騙局全過程(168極速賽車開獎(jiǎng)的視頻)

本篇文章給大家談?wù)?68開獎(jiǎng)極速賽車騙局全過程,以及168極速賽車開獎(jiǎng)的視頻對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、極速賽車的技巧怎么玩? 2、168極速賽車是哪個(gè)國家的 3、極速賽車買前5名的方法 4、168極速賽車來源于哪個(gè)國家 5、極速賽車有...