VUE2.0和VUE3.0的區(qū)別

數(shù)據(jù)的雙向綁定的原理

重構(gòu)響應(yīng)式系統(tǒng)敷硅,使用Proxy替換Object.defineProperty

Object.defineProperty的原理:通過(guò)使用 Object.defineProperty 來(lái)劫持對(duì)象屬性的 geter 和 seter 操作,當(dāng)數(shù)據(jù)發(fā)生改變發(fā)出通知翩概。Vue2.x版本中的雙向綁定不能檢測(cè)到下標(biāo)的變化。

porxy原理:通過(guò)ES6的新特性proxy來(lái)劫持?jǐn)?shù)據(jù)羹膳,當(dāng)數(shù)據(jù)改變時(shí)發(fā)出通知两嘴。proxy可以劫持整個(gè)對(duì)象,并返回一個(gè)新對(duì)象箩绍。

性能的提升

diff方法優(yōu)化

Vue2 中的虛擬dom是進(jìn)行全量的杜比

Vue3 新增了靜態(tài)標(biāo)記(PatchFlag),只比對(duì)帶有 PF 的節(jié)點(diǎn)尺上,并且通過(guò) Flag 的信息得知

當(dāng)前節(jié)點(diǎn)要比對(duì)的具體內(nèi)容材蛛。

靜態(tài)提升

Vue2中無(wú)論元素是否參與更新, 每次都會(huì)重新創(chuàng)建, 然后再渲染

Vue3中對(duì)于不參與更新的元素, 會(huì)做靜態(tài)提升, 只會(huì)被創(chuàng)建一次, 在渲染時(shí)直接復(fù)用即可

cacheHandlers 事件偵聽(tīng)器緩存

Vue2默認(rèn)情況下onClick會(huì)被視為動(dòng)態(tài)綁定, 所以每次都會(huì)去追蹤它的變化

Vue3但是因?yàn)槭峭粋€(gè)函數(shù),所以沒(méi)有追蹤變化, 直接緩存起來(lái)復(fù)用即可

ssr渲染

Vue2當(dāng)有大量靜態(tài)的內(nèi)容時(shí)候怎抛,這些內(nèi)容會(huì)被當(dāng)做純字符串推進(jìn)一個(gè)buffer里面卑吭, 即使存在動(dòng)態(tài)的綁定,會(huì)通過(guò)模板插值嵌入進(jìn)去马绝。這樣會(huì)比通過(guò)虛擬dmo來(lái)渲染的快上很多很多陨簇。

Vue3當(dāng)靜態(tài)內(nèi)容大到一定量級(jí)時(shí)候,會(huì)用_createStaticVNode方法在客戶端去生成一個(gè)static node迹淌,這些靜態(tài)node,會(huì)被直接innerHtml己单,就不需要?jiǎng)?chuàng)建對(duì)象唉窃,然后根據(jù)對(duì)象渲染。

按需編譯纹笼,體積更形品荨(Tree shaking)

Tree-shaking 使編譯更友好,比如,如果你的項(xiàng)目沒(méi)有用到watch蔓涧,那編譯時(shí)就會(huì)把tree shaking掉件已。

Compostion API: 組合API/注入API

Vue2的組件內(nèi),使用的是Option API風(fēng)格(data/methods/mounted)來(lái)組織的代碼元暴,這樣會(huì)讓邏輯分散篷扩,舉個(gè)例子就是我們完成一個(gè)計(jì)數(shù)器功能,要在data里聲明變量茉盏,在methods定義響應(yīng)函數(shù)鉴未,在mounted里初始化變量,如果在一個(gè)功能比較多鸠姨、代碼量比較大的組件里铜秆,你要維護(hù)這樣一個(gè)功能,就需要在data/methods/mounted反復(fù)的切換到對(duì)應(yīng)位置讶迁,然后進(jìn)行代碼的更改连茧。

Vue3中,使用setup函數(shù)巍糯。如下所示跟count相關(guān)的邏輯啸驯,都放到counter.js文件里,跟todo相關(guān)的邏輯放到todos.js里鳞贷。

自定義渲染API(Custom Renderer API)

Vue2.x最開(kāi)始支持運(yùn)行在瀏覽器中坯汤,渲染到瀏覽器的dom上,隨著vue的流行搀愧,出現(xiàn)了weex和myvue惰聂。

Vue2.x項(xiàng)目架構(gòu)對(duì)于這種渲染到不同平臺(tái)不太友好,

Vue3.0推出了自定義渲染API解決了該問(wèn)題咱筛。

vue官方實(shí)現(xiàn)的 createApp 會(huì)給我們的 template 映射生成 html 代碼搓幌,但是要是你不想渲染生成到 html ,而是要渲染生成到 canvas 之類的不是html的代碼的時(shí)候迅箩,那就需要用到 Custom Renderer API 來(lái)定義自己的 render 渲染生成函數(shù)了溉愁。

vite開(kāi)發(fā)構(gòu)建工具

Vue2是使用webpack作為開(kāi)發(fā)構(gòu)建工具的,npm run dev都要等一會(huì)饲趋,項(xiàng)目越大等的時(shí)間越長(zhǎng)

Vue3是使用vite來(lái)做開(kāi)發(fā)構(gòu)建工具拐揭。vite支持瀏覽器支持import關(guān)鍵字,啟動(dòng)項(xiàng)目時(shí)瀏覽器直接請(qǐng)求路由對(duì)應(yīng)的代碼文件奕塑,代理服務(wù)器針對(duì)單個(gè)文件進(jìn)行編譯并返回堂污。如果請(qǐng)求的文件里還import了其他文件,同理瀏覽器繼續(xù)發(fā)請(qǐng)求龄砰,代理服務(wù)器返回盟猖。就這樣實(shí)現(xiàn)了npm run dev時(shí)無(wú)需編譯讨衣,實(shí)時(shí)請(qǐng)求實(shí)時(shí)編譯。

支持TS語(yǔ)法

Vue2結(jié)合ts的具體實(shí)踐中式镐,要用 vue-class-component 強(qiáng)化 vue 組件反镇,讓 Script 支持 TypeScript 裝飾器,用 vue-property-decorator 來(lái)增加更多結(jié)合 Vue 特性的裝飾器娘汞,最終搞的ts的組件寫(xiě)法和js的組件寫(xiě)法差別挺大歹茶。

Vue3量身打造了defineComponent函數(shù),使組件在ts下价说,更好的利用參數(shù)類型推斷 辆亏。Composition API 代碼風(fēng)格中,比較有代表性的api就是 ref 和 reactive鳖目,也很好的支持了類型聲明扮叨。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市领迈,隨后出現(xiàn)的幾起案子彻磁,更是在濱河造成了極大的恐慌,老刑警劉巖狸捅,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衷蜓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡尘喝,警方通過(guò)查閱死者的電腦和手機(jī)磁浇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)朽褪,“玉大人置吓,你說(shuō)我怎么就攤上這事〉拊” “怎么了衍锚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)嗤堰。 經(jīng)常有香客問(wèn)我戴质,道長(zhǎng),這世上最難降的妖魔是什么踢匣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任告匠,我火速辦了婚禮,結(jié)果婚禮上离唬,老公的妹妹穿的比我還像新娘凫海。我一直安慰自己,他們只是感情好男娄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般模闲。 火紅的嫁衣襯著肌膚如雪建瘫。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天尸折,我揣著相機(jī)與錄音啰脚,去河邊找鬼。 笑死实夹,一個(gè)胖子當(dāng)著我的面吹牛橄浓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亮航,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼荸实,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了缴淋?” 一聲冷哼從身側(cè)響起准给,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎重抖,沒(méi)想到半個(gè)月后露氮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钟沛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年畔规,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恨统。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叁扫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出延欠,到底是詐尸還是另有隱情陌兑,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布由捎,位于F島的核電站兔综,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏狞玛。R本人自食惡果不足惜软驰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望心肪。 院中可真熱鬧锭亏,春花似錦、人聲如沸硬鞍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至锅减,卻和暖如春糖儡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怔匣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工握联, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人每瞒。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓金闽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親剿骨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子代芜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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