Vue3 面試必問題

5個面試必問的 Vue3 考點

[Vue中文社區(qū)](javascript:void(0);)

圖片

來自:CSDN狱窘,作者:大唐榮華

1、Vue 3.0 性能提升主要是通過哪幾方面體現(xiàn)的财搁?

1.響應(yīng)式系統(tǒng)提升

vue2在初始化的時候蘸炸,對data中的每個屬性使用definepropery調(diào)用getter和setter使之變?yōu)轫憫?yīng)式對象。如果屬性值為對象尖奔,還會遞歸調(diào)用defineproperty使之變?yōu)轫憫?yīng)式對象搭儒。

vue3使用proxy對象重寫響應(yīng)式。proxy的性能本來比defineproperty好提茁,proxy可以攔截屬性的訪問淹禾、賦值、刪除等操作茴扁,不需要初始化的時候遍歷所有屬性铃岔,另外有多層屬性嵌套的話,只有訪問某個屬性的時候,才會遞歸處理下一級的屬性毁习。

優(yōu)勢:

  • 可以監(jiān)聽動態(tài)新增的屬性智嚷;
  • 可以監(jiān)聽刪除的屬性 ;
  • 可以監(jiān)聽數(shù)組的索引和 length 屬性纺且;

2. 編譯優(yōu)化

優(yōu)化編譯和重寫虛擬dom盏道,讓首次渲染和更新dom性能有更大的提升 vue2 通過標(biāo)記靜態(tài)根節(jié)點,優(yōu)化 diff 算法 vue3 標(biāo)記和提升所有靜態(tài)根節(jié)點,diff 的時候只比較動態(tài)節(jié)點內(nèi)容

Fragments, 模板里面不用創(chuàng)建唯一根節(jié)點,可以直接放同級標(biāo)簽和文本內(nèi)容

靜態(tài)提升

patch flag, 跳過靜態(tài)節(jié)點,直接對比動態(tài)節(jié)點,緩存事件處理函數(shù)

3. 源碼體積的優(yōu)化

vue3移除了一些不常用的api,例如:inline-template载碌、filter等 使用tree-shaking

2. Composition Api 與 Vue 2.x使用的Options Api 有什么區(qū)別猜嘱?

Options Api

包含一個描述組件選項(data、methods嫁艇、props等)的對象 options朗伶;

API開發(fā)復(fù)雜組件,同一個功能邏輯的代碼被拆分到不同選項 步咪;

使用mixin重用公用代碼论皆,也有問題:命名沖突,數(shù)據(jù)來源不清晰歧斟;

composition Api

vue3 新增的一組 api纯丸,它是基于函數(shù)的 api偏形,可以更靈活的組織組件的邏輯静袖。

解決options api在大型項目中,options api不好拆分和重用的問題俊扭。

3. Proxy 相對于 Object.defineProperty

有哪些優(yōu)點队橙?

proxy的性能本來比defineproperty好,proxy可以攔截屬性的訪問萨惑、賦值捐康、刪除等操作,不需要初始化的時候遍歷所有屬性庸蔼,另外有多層屬性嵌套的話解总,只有訪問某個屬性的時候,才會遞歸處理下一級的屬性姐仅。

  • 可以* 監(jiān)聽數(shù)組變化
  • 可以劫持整個對象
  • 操作時不是對原對象操作,是 new Proxy 返回的一個新對象
  • 可以劫持的操作有 13 種

4. Vue 3.0 在編譯方面有哪些優(yōu)化花枫?

vue.js 3.x中標(biāo)記和提升所有的靜態(tài)節(jié)點,diff的時候只需要對比動態(tài)節(jié)點內(nèi)容掏膏;

Fragments(升級vetur插件):

template中不需要唯一根節(jié)點劳翰,可以直接放文本或者同級標(biāo)簽

靜態(tài)提升(hoistStatic),當(dāng)使用 hoistStatic 時,所有靜態(tài)的節(jié)點都被提升到 render 方法之外.只會在應(yīng)用啟動的時候被創(chuàng)建一次,之后使用只需要應(yīng)用提取的靜態(tài)節(jié)點,隨著每次的渲染被不停的復(fù)用馒疹。

patch flag, 在動態(tài)標(biāo)簽?zāi)┪布由舷鄳?yīng)的標(biāo)記,只能帶 patchFlag 的節(jié)點才被認(rèn)為是動態(tài)的元素,會被追蹤屬性的修改,能快速的找到動態(tài)節(jié)點,而不用逐個逐層遍歷佳簸,提高了虛擬dom diff的性能。

緩存事件處理函數(shù)cacheHandler,避免每次觸發(fā)都要重新生成全新的function去更新之前的函數(shù) tree shaking 通過搖樹優(yōu)化核心庫體積,減少不必要的代碼量

5. Vue.js 3.0 響應(yīng)式系統(tǒng)的實現(xiàn)原理颖变?

1. reactive

設(shè)置對象為響應(yīng)式對象生均。接收一個參數(shù)听想,判斷這參數(shù)是否是對象。不是對象則直接返回這個參數(shù)疯特,不做響應(yīng)式處理哗魂。創(chuàng)建攔截器handerler,設(shè)置get/set/deleteproperty漓雅。

get

  • 收集依賴(track)录别;
  • 如果當(dāng)前 key 的值是對象,則為當(dāng)前 key 的對
  • 象創(chuàng)建攔截器 handler, 設(shè)置 get/set/deleteProperty邻吞;

如果當(dāng)前的 key 的值不是對象组题,則返回當(dāng)前 key 的值。

set

設(shè)置的新值和老值不相等時抱冷,更新為新值崔列,并觸發(fā)更新(trigger)。

deleteProperty 當(dāng)前對象有這個 key 的時候旺遮,刪除這個 key 并觸發(fā)更新(trigger)赵讯。

2. effect

接收一個函數(shù)作為參數(shù)。作用是:訪問響應(yīng)式對象屬性時去收集依賴

3. track

接收兩個參數(shù):target 和 key

-如果沒有 activeEffect耿眉,則說明沒有創(chuàng)建 effect 依賴

-如果有 activeEffect边翼,則去判斷 WeakMap 集合中是否有 target 屬性

-WeakMap 集合中沒有 target 屬性,則 set(target, (depsMap = new Map()))

-WeakMap 集合中有 target 屬性鸣剪,則判斷 target 屬性的 map 值的 depsMap 中是否有 key 屬性

-depsMap 中沒有 key 屬性组底,則 set(key, (dep = new Set())) -depsMap 中有 key 屬性,則添加這個 activeEffect

4.trigger

判斷 WeakMap 中是否有 target 屬性筐骇,WeakMap 中有 target 屬性债鸡,則判斷 target 屬性的 map 值中是否有 key 屬性,有的話循環(huán)觸發(fā)收集的 effect()铛纬。

END

圖片

<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; color: rgb(63, 63, 63); font-size: 16px; letter-spacing: 0.544px; text-align: left; background-color: rgb(255, 255, 255);">推薦閱讀:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市告唆,隨后出現(xiàn)的幾起案子棺弊,更是在濱河造成了極大的恐慌,老刑警劉巖悔详,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镊屎,死亡現(xiàn)場離奇詭異,居然都是意外死亡茄螃,警方通過查閱死者的電腦和手機(jī)缝驳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人用狱,你說我怎么就攤上這事运怖。” “怎么了夏伊?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵摇展,是天一觀的道長。 經(jīng)常有香客問我溺忧,道長咏连,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任鲁森,我火速辦了婚禮祟滴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘歌溉。我一直安慰自己垄懂,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布痛垛。 她就那樣靜靜地躺著草慧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匙头。 梳的紋絲不亂的頭發(fā)上漫谷,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機(jī)與錄音乾胶,去河邊找鬼抖剿。 笑死朽寞,一個胖子當(dāng)著我的面吹牛识窿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脑融,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼喻频,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肘迎?” 一聲冷哼從身側(cè)響起甥温,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妓布,沒想到半個月后姻蚓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡匣沼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年狰挡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡加叁,死狀恐怖倦沧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情它匕,我是刑警寧澤展融,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站豫柬,受9級特大地震影響告希,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烧给,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一暂雹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧创夜,春花似錦杭跪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至檬贰,卻和暖如春姑廉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翁涤。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工桥言, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人葵礼。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓号阿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鸳粉。 傳聞我的和親對象是個殘疾皇子扔涧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349