全面改革:解讀vue3.0的變化

9月30日,尤雨溪在medium個(gè)人博客上發(fā)布了vue3.0的開發(fā)思路,國(guó)內(nèi)有翻譯的版本,見文章最后的參考鏈接。3.0帶了了很大的變化,他講了一些改進(jìn)的思路以及整個(gè)開發(fā)流程的規(guī)劃。

vue3.0的改進(jìn)思路

vue最主要的特點(diǎn)就是響應(yīng)式機(jī)制、模板、以及對(duì)象式的組件聲明語(yǔ)法,而3.0對(duì)這三部分都做了更改。

1. 響應(yīng)式

2.x的響應(yīng)式是基于Object.defineProperty實(shí)現(xiàn)的代理,兼容主流瀏覽器和ie9以上的ie瀏覽器,能夠監(jiān)聽數(shù)據(jù)對(duì)象的變化,但是監(jiān)聽不到對(duì)象屬性的增刪數(shù)組元素和長(zhǎng)度的變化,同時(shí)會(huì)在vue初始化的時(shí)候把所有的Observer都建立好,才能觀察到數(shù)據(jù)對(duì)象屬性的變化。

針對(duì)上面的問題,3.0進(jìn)行了革命性的變更,采用了ES2015的Proxy來(lái)代替Object.defineProperty,可以做到監(jiān)聽對(duì)象屬性的增刪和數(shù)組元素和長(zhǎng)度的修改,還可以監(jiān)聽Map、Set、WeakSet、WeakMap,同時(shí)還實(shí)現(xiàn)了惰性的監(jiān)聽,不會(huì)在初始化的時(shí)候創(chuàng)建所有的Observer,而是會(huì)在用到的時(shí)候才去監(jiān)聽。但是,雖然主流的瀏覽器都支持Proxy,ie系列卻還是不兼容,所以針對(duì)ie11,vue3.0決定做單獨(dú)的適配,暴露出來(lái)的api一樣,但是底層實(shí)現(xiàn)還是Object.defineProperty,這樣導(dǎo)致了ie11還是有2.x的問題。但是絕大部分情況下,3.0帶來(lái)的好處已經(jīng)能夠體驗(yàn)到了。

響應(yīng)式方面,vue3.0做了實(shí)現(xiàn)機(jī)制的變更,采用ES2015的Proxy,不但解決了vue2.x中的問題,還是得性能有了進(jìn)一步提升。雖然有一些兼容問題,但是通過(guò)適配的方式解決掉了。此外,還暴露了observable的api來(lái)創(chuàng)建響應(yīng)式對(duì)象,可以替代掉event bus,來(lái)做一些跨組件的通信。

2.模板

模板方面沒有大的變更,只改了作用域插槽,2.x的機(jī)制導(dǎo)致作用域插槽變了,父組件會(huì)重新渲染,而3.0把作用于插槽改成了函數(shù)的方式,這樣只會(huì)影響子組件的重新渲染,提升了渲染的性能。

同時(shí),對(duì)于render函數(shù)的方面,vue3.0也會(huì)進(jìn)行一系列更改來(lái)方便習(xí)慣直接使用api來(lái)生成vdom的開發(fā)者。

3. 對(duì)象式的組件聲明方式

vue2.x中的組件是通過(guò)聲明的方式傳入一系列option,和TypeScript的結(jié)合需要通過(guò)一些裝飾器的方式來(lái)做,雖然能實(shí)現(xiàn)功能,但是比較麻煩。

3.0修改了組件的聲明方式,改成了類式的寫法,這樣使得和TypeScript的結(jié)合變得很容易。

此外,vue的源碼也改用了TypeScript來(lái)寫。其實(shí)當(dāng)代碼的功能復(fù)雜之后,必須有一個(gè)靜態(tài)類型系統(tǒng)來(lái)做一些輔助管理,如React使用的Flow,Angular使用的TypeScript。現(xiàn)在vue3.0也全面改用TypeScript來(lái)重寫了,更是使得對(duì)外暴露的api更容易結(jié)合TypeScript。靜態(tài)類型系統(tǒng)對(duì)于復(fù)雜代碼的維護(hù)確實(shí)很有必要。

其他的一些東西

vue3.0的改變是全面的,上面只涉及到主要的3個(gè)方面,還有一些其他的更改:

  • 支持自定義渲染器,從而使得weex可以通過(guò)自定義渲染器的方式來(lái)擴(kuò)展,而不是直接fork源碼來(lái)改的方式。
  • 支持Fragment(多個(gè)根節(jié)點(diǎn))和Protal(在dom其他部分渲染組建內(nèi)容)組件,針對(duì)一些特殊的場(chǎng)景做了處理。
  • 基于treeshaking優(yōu)化,提供了更多的內(nèi)置功能。

vue3.0的開發(fā)流程規(guī)劃

vue的開發(fā)思路是公開的,尤雨溪說(shuō)主要的特性會(huì)聽取一些主要庫(kù)的開發(fā)者的反饋,有比較確定的方案以后公布RFC收集公眾的反饋意見,之后才進(jìn)入開發(fā),同時(shí)會(huì)同步生態(tài)內(nèi)相關(guān)的庫(kù)和工具的更新。

雖然vue不如react和angular那樣有大公司維護(hù),但是借助開源的力量,整個(gè)流程都是開源社區(qū)參與的,這樣vue的穩(wěn)定程度和開發(fā)思路自然也就不會(huì)有什么大的問題。

總結(jié)

vue3.0對(duì)vue的主要3個(gè)特點(diǎn):響應(yīng)式、模板、對(duì)象式的組件聲明方式,進(jìn)行了全面的更改,底層的實(shí)現(xiàn)和上層的api都有了明顯的變化,基于Proxy重新實(shí)現(xiàn)了響應(yīng)式,基于treeshaking內(nèi)置了更多功能,提供了類式的組件聲明方式。而且源碼全部用typescript重寫。以及進(jìn)行了一系列的性能優(yōu)化。

尤雨溪說(shuō),大概19年左右就可以見到vue3.0,非常期待這個(gè)全面改革的版本 。

參考鏈接:
重磅!尤雨溪發(fā)布Vue 3.0開發(fā)路線

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,778評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,795評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,993評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,229評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,687評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,990評(píng)論 2 374

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

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 16,000評(píng)論 3 119
  • 顧笙曾經(jīng)有一個(gè)好姐妹陸珂,是顧笙小時(shí)候在外婆家住時(shí)結(jié)交的朋友。從記事起,顧笙的記憶里就有陸珂,顧笙跟陸珂的關(guān)系好到...
    寧素衣閱讀 191評(píng)論 0 1
  • 昨天跟小龍溝通完,自己的那種孤獨(dú)感、悲涼就化解了。恰逢狄姐姐回來(lái),她這兩天能量爆棚,我們說(shuō)了幾句話,之前的不快,就...
    新芽作伴閱讀 164評(píng)論 0 2
  • 縱觀當(dāng)今營(yíng)銷界,越來(lái)越多的品牌開始組CP。前有初音與LV的打破次元壁合作,后有滴滴和Uber的相愛相殺在一起……這...
    科技看點(diǎn)閱讀 859評(píng)論 0 1
  • 世間之人,有君子和小人之說(shuō)。君子者,光明之人物,本分,固窮;小人者,陰險(xiǎn)之角色,狡詐,斯濫。 不管。 下午去海口西...
    魯長(zhǎng)安閱讀 993評(píng)論 0 0