Vue3和Vue2的區(qū)別

vue3 新增的亮點(diǎn)
  • Performance 性能優(yōu)化
  • Tree-shaking 支持搖樹(shù)優(yōu)化
  • Composition API 組合式API
  • 新增組件 Fragment Teleport Supense
  • 更好的支持ts
  • Custom render API 自定義渲染器
性能提升
  1. 響應(yīng)式性能提升
    1.1 diff 方法優(yōu)化
    在vue2中蘸炸,數(shù)據(jù)發(fā)生變化時(shí)搭儒,會(huì)生成一個(gè)新的dom樹(shù),然后和之前的dom樹(shù)進(jìn)行比較馁菜,找到變更的節(jié)點(diǎn)然后更新到真實(shí)的dom上铃岔。在比較的過(guò)程中會(huì)對(duì)沒(méi)有發(fā)生改變的dom也進(jìn)行比較,這樣消耗了一定的時(shí)間智嚷。
    在vue3中盏道,在創(chuàng)建虛擬dom時(shí)會(huì)根據(jù)dom的內(nèi)容添加一個(gè)靜態(tài)標(biāo)記,在數(shù)據(jù)發(fā)生變化時(shí)就會(huì)帶著靜態(tài)標(biāo)記的節(jié)點(diǎn)去對(duì)比衅枫,能夠快速找到需要更新的dom朗伶。
    1.2 事件偵聽(tīng)器緩存
    vue2中 onClick 被認(rèn)為是動(dòng)態(tài)綁定,每次都會(huì)最終它的變化孤钦。但因?yàn)槭峭粋€(gè)函數(shù)偏形,vue3中進(jìn)行了緩存觉鼻。
    1.3 ssr渲染
    當(dāng)存在大量靜態(tài)內(nèi)容時(shí),這些內(nèi)容會(huì)被當(dāng)做純字符串推進(jìn)一個(gè) buffer 內(nèi)萨惑,即使存在動(dòng)態(tài)綁定仇矾,也會(huì)通過(guò)模板插值潛入進(jìn)去贮匕,這樣會(huì)比虛擬 DOM 渲染快得多。
  2. 代碼體積
    vue3 移除了一些不常用的 API掏膏,如:inline-template敦锌、filter 等乙墙,使用 tree-shaking生均。
    Tree Shaking 搖樹(shù)優(yōu)化疯特,指的就是當(dāng)我們引入一個(gè)模塊的時(shí)候漓雅,不引入這個(gè)模塊的所有代碼朽色,只引入我們需要的代碼。
    在 vue2 中葫男,很多函數(shù)都掛載到全局 Vue 對(duì)象上,如:nextTick旺遮、set 函數(shù)等耿眉,雖然我們不常用鱼响,但打包時(shí)只要引入 Vue 這些全局函數(shù)會(huì)打包進(jìn) bundle 中丈积。而 vue3 中,引入tree-shaking铛纬,所有的 API 都通過(guò) ES6 模塊化的方式引入饺鹃,這樣就能夠讓 webpack 或 rollup 等打包工具在打包時(shí),就會(huì)自動(dòng)對(duì)沒(méi)有用到的 API 進(jìn)行剔除镊屎,最小化 bundle 體積缝驳。
  3. 編譯優(yōu)化
    3.1 靜態(tài)提升
    在vue2中归苍,dom更新時(shí)無(wú)論元素是否需要參與更新拼弃,都會(huì)重新創(chuàng)建再渲染摇展。vue3使用了靜態(tài)提升后吻氧,對(duì)于不參與更新的元素只會(huì)創(chuàng)建一次咏连,在渲染的過(guò)程直接復(fù)用。
    3.2 Fragment
    模板內(nèi)不用再創(chuàng)建一個(gè)唯一根節(jié)點(diǎn)振惰,可以直接放同級(jí)標(biāo)簽和內(nèi)容骑晶。就相當(dāng)于少了一個(gè)節(jié)點(diǎn)嵌套渲染桶蛔。
選項(xiàng)式 api VS 組合式 api

在 vue2 中采用選項(xiàng)式 api 羽圃,會(huì)在 vue 文件的 data抖剿、methods斩郎、watch缩宜、computed 中定義屬性和方法锻煌,共同處理頁(yè)面邏輯,多個(gè)功能相互交叉匣沼,纏繞在一起释涛,代碼過(guò)于分散唇撬。
而 vue3 新增了組合式 api 窖认,一個(gè)功能模塊代碼會(huì)集中到一起耀态,實(shí)現(xiàn)高內(nèi)聚首装,低耦合仙逻。提高代碼的可讀性和可維護(hù)性系奉,基于函數(shù)組合的 api 更好地重用邏輯代碼

proxy 相對(duì) Object.defineProperty 優(yōu)點(diǎn)有哪些缺亮?

vue2 利用 Object.defineProperty 來(lái)劫持 data 數(shù)據(jù)的 getter 和 setter 操作萌踱,使得 data 在被訪問(wèn)或賦值時(shí)并鸵,動(dòng)態(tài)更新綁定的 template 模板园担。而 Object.defineProperty 必須遍歷所有的預(yù)值才能劫持每一個(gè)屬性弯汰,這一缺點(diǎn)正好能夠被 proxy 解決咏闪。

proxy 相比 Object.defineProperty 優(yōu)點(diǎn)分別為:
代碼的執(zhí)行效果更快织鲸。
proxy 可以直接監(jiān)聽(tīng)對(duì)象而不是它的屬性搂擦。
proxy 可以直接監(jiān)聽(tīng)數(shù)組的每個(gè)元素的變化瀑踢。
proxy 不需要初始化的時(shí)候遍歷所有屬性橱夭,如果有多層嵌套的話棘劣,只訪問(wèn)某個(gè)屬性的時(shí)候茬暇,proxy 能夠快速訪問(wèn)到糙俗,而 Object.defineProperty 還需要遍歷所有屬性巧骚,然后逐級(jí)向下訪問(wèn)劈彪。
proxy 返回的是一個(gè)新對(duì)象粉臊,可以直接操作新對(duì)象而達(dá)到目標(biāo)扼仲。而 Object.defineProperty 操作的是原對(duì)象屠凶,只能遍歷對(duì)象屬性然后對(duì)其直接修改矗愧。
proxy 有 13 種攔截方法夜涕,不限于 apply女器、ownKeys驾胆、deleteProperty 等,而 Object.defineporperty 不具備驳阎。
在 vue2 中搞隐,我們給對(duì)象新增一個(gè)屬性時(shí),如果新增屬性的值發(fā)生改變的時(shí)候癞季,我們發(fā)現(xiàn)視圖并沒(méi)有更新,因?yàn)樾略鰧傩允菬o(wú)法監(jiān)聽(tīng)到的废睦。同樣的嗜湃,通過(guò)下標(biāo)直接改變數(shù)組,視圖也是無(wú)法更新的刚陡,也是因?yàn)楸O(jiān)聽(tīng)不到歌殃。在 vue3 中新增 proxy 挺份,解決了這些問(wèn)題优训。

更好的 ts 支持

vue2 不適合使用 ts抡医,在于它的 Options API 風(fēng)格忌傻。
options 是一個(gè)簡(jiǎn)單的對(duì)象,而 ts 是一種類(lèi)型系統(tǒng)俘种、面向?qū)ο蟮恼Z(yǔ)法,兩個(gè)不匹配悬包。
vue3 新增了 defineComponent 函數(shù),使組件在 ts 下,更好的利用參數(shù)類(lèi)型推斷季蚂。如:reactive 和 ref 很具有代表性算谈。

更先進(jìn)的組件
  1. Fragment
    在 vue2 中,每個(gè)模板必須有一個(gè)根節(jié)點(diǎn),否則就會(huì)報(bào)錯(cuò)鲸匿。
    vue3 中可以不需要根節(jié)點(diǎn),多個(gè)元素或標(biāo)簽可并列存在乔煞。
  2. Teleport
    可以把 teleport 中的內(nèi)容添加到任意的節(jié)點(diǎn)內(nèi),對(duì)于嵌套較深的組件來(lái)說(shuō)絕對(duì)是一個(gè)福音。
  3. Supense
    允許程序在等待異步組件渲染一些后備的內(nèi)容府怯,可以讓我們創(chuàng)建一個(gè)平滑的用戶體驗(yàn)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亿昏,一起剝皮案震驚了整個(gè)濱河市吝沫,隨后出現(xiàn)的幾起案子羹幸,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異弟翘,居然都是意外死亡悦冀,警方通過(guò)查閱死者的電腦和手機(jī)师骗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辟癌,“玉大人寒屯,你說(shuō)我怎么就攤上這事∈蛏伲” “怎么了寡夹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)厂置。 經(jīng)常有香客問(wèn)我菩掏,道長(zhǎng),這世上最難降的妖魔是什么昵济? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任智绸,我火速辦了婚禮野揪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘传于。我一直安慰自己囱挑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布沼溜。 她就那樣靜靜地躺著平挑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪系草。 梳的紋絲不亂的頭發(fā)上通熄,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音找都,去河邊找鬼唇辨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛能耻,可吹牛的內(nèi)容都是我干的赏枚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼晓猛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼饿幅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起戒职,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤栗恩,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后洪燥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體磕秤,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年捧韵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了市咆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纫版,死狀恐怖床绪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情其弊,我是刑警寧澤癞己,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站梭伐,受9級(jí)特大地震影響痹雅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糊识,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一绩社、第九天 我趴在偏房一處隱蔽的房頂上張望摔蓝。 院中可真熱鬧,春花似錦愉耙、人聲如沸贮尉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)猜谚。三九已至,卻和暖如春赌渣,著一層夾襖步出監(jiān)牢的瞬間魏铅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工坚芜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留览芳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓鸿竖,卻偏偏與公主長(zhǎng)得像沧竟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缚忧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容