vue3新特性

1.diff方法優(yōu)化

vue2中虛擬dom通過模板創(chuàng)建虛擬節(jié)點(js對象),然后使用虛擬節(jié)點跟上一次緩存的虛擬節(jié)點進行全量的對比。
vue3在與上次虛擬節(jié)點進行對比時候穿稳,只對比帶有patch flag的節(jié)點,并且可以通過flag的信息得知當前節(jié)點要對比的具體內(nèi)容
image.png

2.hoistStatic 靜態(tài)提升

靜態(tài)節(jié)點進行提升寻拂,靜態(tài)span被拿到函數(shù)體外面程奠,這樣在第一次創(chuàng)建后,后面的節(jié)點會復(fù)用這個創(chuàng)建方法祭钉,免去了重復(fù)創(chuàng)建節(jié)點瞄沙,大型應(yīng)用會受益于這個改動,免去了重復(fù)的創(chuàng)建操作慌核,優(yōu)化運行時候的內(nèi)存占用距境。


image.png

3.cacheHandlers 事件偵聽器緩存 [上面的是不使用,下面的是使用的]

不使用cacheHandlers :onclick是看成一個動態(tài)的綁定,因為綁定的函數(shù)可能會被改變,例如fn本來是data中返回的,之后如果把它替換掉了,這在實際中需要進行一個更新
使用cacheHandlers : 第一次渲染是自動生成一個內(nèi)聯(lián)的函數(shù),在內(nèi)聯(lián)函數(shù)里面引用當前的fn,然后把內(nèi)聯(lián)函數(shù)隱藏(cache)起來,后續(xù)會從緩存讀取同一個函數(shù)垮卓,因為是同一個函數(shù)就沒有必要追蹤變化垫桂,這樣就把span變成了靜態(tài)的,手寫的內(nèi)聯(lián)函數(shù)也會被cache起來,這樣就會避免一些沒必要的更新.

在組件上使用內(nèi)聯(lián)函數(shù)會受益于這個改動.


image.png

4.ssr渲染

當有大量的靜態(tài)內(nèi)容的時候粟按,這些內(nèi)容會被當做字符串推進一個buffer(存儲緩沖器)里面,會通過模板插值嵌入進去,這樣會比虛擬dom來渲染快上很多诬滩。
當靜態(tài)內(nèi)容打到一定量級,會用_createStaticVNode方法在客戶端去生成一個靜態(tài)節(jié)點(static node),會被直接innerHTML,就不需要創(chuàng)建對象灭将,然后根據(jù)對象渲染疼鸟。


image.png

變化偵測

ES6之前,js是沒有提供元編程的能力的宗侦,也就是沒有提供可以攔截原型方法的能力愚臀,vue通過覆蓋Array原型的方法忆蚀,來達到做一些自定義操作的目的矾利,比如說發(fā)送變化通知。

vue2中覆蓋了Array原型中的7個方法馋袜,分別是:push男旗、pop、shift欣鳖、unshift察皇、splice、sort泽台、reverse什荣,所以當直接通過索引改變數(shù)組時,vue是追蹤不到變化的怀酷。

所以在vue2中實現(xiàn)數(shù)據(jù)雙向綁定稻爬,是通過Object.definePropertyd劫持各個屬性的getter、setter蜕依,在讀取數(shù)據(jù)時觸發(fā)getter桅锄,修改數(shù)據(jù)時候觸發(fā)setter琉雳。

在getter中收集哪些依賴使用了數(shù)據(jù),當setter被觸發(fā)時候友瘤,通知getter中收集的依賴數(shù)據(jù)變化了翠肘。

在vue3中改為用Proxy,但是Proxy只能代理一層辫秧,對于深層的無法代理束倍。vue3中利用每次set被攔截之前都會攔截到get操作,所以vue3在get中直接對數(shù)據(jù)進行reactive茶没,這樣就大大減少了遞歸reactive帶來的性能消耗肌幽。
與Object.definePropertyd對比優(yōu)勢:

  1. 可以直接監(jiān)聽對象而非屬性
  2. 可以直接監(jiān)聽數(shù)組的變化
  3. Proxy有多達13種攔截方式,不限于apply抓半、ownKeys喂急、deleteProperty、has等等是    Object.defineProperty不具備的
  4. Proxy返回的是一個新對象笛求,可以只操作新的對象達到目的廊移,而Object.defineProperty只能遍歷對象屬性直接修改 

————————————————

原文鏈接:https://blog.csdn.net/weixin_39364136/article/details/107743534

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市探入,隨后出現(xiàn)的幾起案子狡孔,更是在濱河造成了極大的恐慌,老刑警劉巖蜂嗽,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苗膝,死亡現(xiàn)場離奇詭異,居然都是意外死亡植旧,警方通過查閱死者的電腦和手機辱揭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來病附,“玉大人问窃,你說我怎么就攤上這事⊥昊Γ” “怎么了域庇?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長覆积。 經(jīng)常有香客問我听皿,道長,這世上最難降的妖魔是什么宽档? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任尉姨,我火速辦了婚禮,結(jié)果婚禮上雌贱,老公的妹妹穿的比我還像新娘啊送。我一直安慰自己偿短,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布馋没。 她就那樣靜靜地躺著昔逗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪篷朵。 梳的紋絲不亂的頭發(fā)上勾怒,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音声旺,去河邊找鬼笔链。 笑死,一個胖子當著我的面吹牛腮猖,可吹牛的內(nèi)容都是我干的鉴扫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼澈缺,長吁一口氣:“原來是場噩夢啊……” “哼坪创!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起姐赡,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤莱预,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后项滑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體依沮,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年枪狂,在試婚紗的時候發(fā)現(xiàn)自己被綠了危喉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡摘完,死狀恐怖姥饰,靈堂內(nèi)的尸體忽然破棺而出傻谁,到底是詐尸還是另有隱情孝治,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布审磁,位于F島的核電站谈飒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏态蒂。R本人自食惡果不足惜杭措,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钾恢。 院中可真熱鬧手素,春花似錦鸳址、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至崩哩,卻和暖如春巡球,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背邓嘹。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工酣栈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汹押。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓矿筝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棚贾。 傳聞我的和親對象是個殘疾皇子跋涣,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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