Vue.js 3.0 "One Piece" 已正式發布,此框架新(xīn)的主要版本提供了更好的性能(néng)、更小(xiǎo)的捆綁包體(tǐ)積、更好的 TypeScript 集成、用(yòng)于處理(lǐ)大規模用(yòng)例的新(xīn) API,并為(wèi)框架未來的長(cháng)期叠代奠定了堅實的基礎。
3.0 版本的開發周期長(cháng)達兩年多(duō),期間産(chǎn)生了 30+ RFCs、2600+ commits、628 pull requests,以及核心倉庫之外的大量開發和文(wén)檔工(gōng)作(zuò)。
Vue 3.0 的發布标志(zhì)着此框架整體(tǐ)上已處于可(kě)用(yòng)狀态。盡管框架的某些子項目可(kě)能(néng)仍需要進一步的開發才能(néng)達到穩定狀态(特别是 devtools 中(zhōng)的路由和 Vuex 集成),不過現在仍然是開始使用(yòng) Vue 3 啓動新(xīn)項目的合适時機。官方還鼓勵庫作(zuò)者現在可(kě)以開始升級項目以支持 Vue 3。查閱《Vue 3 Libraries Guide》以獲取有(yǒu)關所有(yǒu)框架子項目的詳細信息。
分(fēn)層内部模塊 (Layered internal modules)
Vue 3.0 core 仍然可(kě)以通過<script>
标簽進行使用(yòng),但其内部架構已被徹底重寫為(wèi)一組解耦的模塊。新(xīn)架構提供了更好的可(kě)維護性,并允許使用(yòng)者通過 tree-shaking 來減少多(duō)達一半的 runtime 大小(xiǎo)。
這些模塊還将許多(duō)底層 API 暴露出來,可(kě)用(yòng)于許多(duō)高級用(yòng)例:
編譯器為(wèi)定制 build-time 提供了對自定義 AST 轉換的支持(例如 build-time i18n)
内核 runtime 提供了優先級最高的 API,用(yòng)于創建針對不同渲染目标(例如原生移動設備、WebGL 或終端)的自定義渲染器。默認 DOM 渲染器使用(yòng)相同的 API 構建
@vue/reactivity
模塊導出的函數可(kě)以直接訪問 Vue 的 reactivity 系統,其本身也可(kě)以作(zuò)為(wèi)一個獨立的程序包使用(yòng)。它還可(kě)以與其他(tā)模闆解決方案(例如 vue-lit)搭配使用(yòng),甚至可(kě)以在非 UI 場景中(zhōng)使用(yòng)
用(yòng)于處理(lǐ)大規模用(yòng)例的新(xīn) API
在 Vue 3 中(zhōng),基于對象的 2.x API 基本沒有(yǒu)變化。不過 3.0 還引入了 Composition API,旨在解決 Vue 在大型應用(yòng)程序中(zhōng)的使用(yòng)痛點。Composition API 構建于 reactivity API 之上,可(kě)以實現類似于 React 鈎子(React hooks)的邏輯組合和重用(yòng),與 2.x 基于對象的 API 相比,擁有(yǒu)更靈活的代碼組織模式和更可(kě)靠的類型推導。
通過 @vue/composition-api 插件,Composition API 還可(kě)以與 Vue 2.x 搭配使用(yòng),并且目前已經有(yǒu)适用(yòng)于 Vue 2 和 3 的 Composition API 實用(yòng)程序庫(例如 vueuse,vue-composable)。
提升性能(néng)
與 Vue 2 相比,Vue 3 在捆綁包體(tǐ)積(通過 tree-shaking 減小(xiǎo)約 41% 大小(xiǎo))、初始渲染(速度提升約 55%)、更新(xīn)(速度提升約 133%)和内存使用(yòng)率(降低約 54%)等方面有(yǒu)了顯著的性能(néng)提升。
Vue 3 采用(yòng)了"compiler-informed Virtual DOM"的方法:模闆編譯器執行激進的優化并生成渲染函數代碼,以提升靜态内容訪問速度,為(wèi)綁定類型留下 runtime 提示。最重要的是,将内部的動态節點扁平化處理(lǐ),以降低 runtime 遍曆的成本。因此,用(yòng)戶可(kě)以獲得兩全其美的效果:通過模闆優化編譯器的性能(néng),或者在用(yòng)例需要時通過手動渲染函數直接控制。
改進與 TypeScript 的集成
Vue 3 使用(yòng) TypeScript 編寫,具(jù)有(yǒu)自動生成、測試和捆綁的類型定義等特性。Composition API 可(kě)與類型推導很(hěn)好地搭配使用(yòng)。Vetur,Vue 3 的官方 VSCode 擴展,現在支持模闆表達式,以及利用(yòng) Vue 3 改進的内部類型進行 props 類型檢查。
實驗性功能(néng)
為(wèi)單文(wén)件組件(SFC, Singe-File Components),即 .vue 文(wén)件提供了兩項新(xīn)特性:
上述已在 Vue 3.0 中(zhōng)實現并可(kě)用(yòng),但僅出于收集反饋的目的而提供。在合并 RFC 之前,它們将保持實驗性狀态。
此外還實現了一個當前未記錄的<Suspense>
組件,該組件允許在初始渲染或分(fēn)支切換時等待嵌套的異步依賴項(異步組件或包含async setup()
的組件)。目前正在與 Nuxt.js 團隊一起測試和叠代此功能(néng)(即将在 Nuxt 3發布),并且可(kě)能(néng)會在 3.1 中(zhōng)到達穩定。
下一步
發布後的短期内,開發團隊将專注于:
版本遷移
支持 IE11
新(xīn) devtools 中(zhōng)的路由和 Vuex 集成
對 Vetur 中(zhōng)模闆類型推導的進一步改進
目前,Vue 3 和 v3-targeting 項目的文(wén)檔網站、GitHub 分(fēn)支和 npm dist 标簽将保持 next-denoted 狀态。這意味着使用(yòng)npm install vue
命令仍會安(ān)裝(zhuāng) Vue 2.x,而要安(ān)裝(zhuāng) Vue 3 需使用(yòng)npm install vue@next
命令。官方計劃在 2020 年底前将所有(yǒu)的 doc 鏈接、分(fēn)支和 dist 标簽都切換為(wèi)默認 3.0。
同時,團隊已開始啓動 2.7 的開發工(gōng)作(zuò)計劃,這将是 2.x 的最後一個次要版本。2.7 将向後移植來自 v3 的兼容改進,并會提示有(yǒu)關 v3 中(zhōng)已删除/更改的 API 使用(yòng)情況的警告。團隊表示計劃在 2021 年第一季度開發 2.7,發布後将直接變為(wèi) LTS 版本,具(jù)有(yǒu) 18 個月的維護周期。