Vue.js 3.0 "One Piece" 已正式發(fā)布,此框架新的主要版本提供了更好的性能夫嗓、更小的捆綁包體積迟螺、更好的 TypeScript 集成、用于處理大規(guī)模用例的新 API舍咖,并為框架未來的長期迭代奠定了堅實的基礎矩父。
3.0 版本的開發(fā)周期長達兩年多,期間產生了 30+ RFCs排霉、2600+ commits窍株、628 pull requests,以及核心倉庫之外的大量開發(fā)和文檔工作攻柠。
Vue 3.0 的發(fā)布標志著此框架整體上已處于可用狀態(tài)球订。盡管框架的某些子項目可能仍需要進一步的開發(fā)才能達到穩(wěn)定狀態(tài)(特別是 devtools 中的路由和 Vuex 集成),不過現(xiàn)在仍然是開始使用 Vue 3 啟動新項目的合適時機瑰钮。官方還鼓勵庫作者現(xiàn)在可以開始升級項目以支持 Vue 3冒滩。查閱《Vue 3 Libraries Guide》以獲取有關所有框架子項目的詳細信息。
分層內部模塊 (Layered internal modules)
Vue 3.0 core 仍然可以通過<script>
標簽進行使用浪谴,但其內部架構已被徹底重寫為一組解耦的模塊开睡。新架構提供了更好的可維護性因苹,并允許使用者通過 tree-shaking 來減少多達一半的 runtime 大小。
這些模塊還將許多底層 API 暴露出來篇恒,可用于許多高級用例:
- 編譯器為定制 build-time 提供了對自定義 AST 轉換的支持(例如 build-time i18n)
- 內核 runtime 提供了優(yōu)先級最高的 API扶檐,用于創(chuàng)建針對不同渲染目標(例如原生移動設備、WebGL 或終端)的自定義渲染器婚度。默認 DOM 渲染器使用相同的 API 構建
- @vue/reactivity模塊導出的函數(shù)可以直接訪問 Vue 的 reactivity 系統(tǒng)蘸秘,其本身也可以作為一個獨立的程序包使用。它還可以與其他模板解決方案(例如 vue-lit)搭配使用蝗茁,甚至可以在非 UI 場景中使用
用于處理大規(guī)模用例的新 API
在 Vue 3 中醋虏,基于對象的 2.x API 基本沒有變化。不過 3.0 還引入了 Composition API哮翘,旨在解決 Vue 在大型應用程序中的使用痛點颈嚼。Composition API 構建于 reactivity API 之上,可以實現(xiàn)類似于 React 鉤子(React hooks)的邏輯組合和重用饭寺,與 2.x 基于對象的 API 相比阻课,擁有更靈活的代碼組織模式和更可靠的類型推導。
通過 @vue/composition-api 插件艰匙,Composition API 還可以與 Vue 2.x 搭配使用限煞,并且目前已經有適用于 Vue 2 和 3 的 Composition API 實用程序庫(例如 vueuse,vue-composable)员凝。
提升性能
與 Vue 2 相比署驻,Vue 3 在捆綁包體積(通過 tree-shaking 減小約 41% 大小)健霹、初始渲染(速度提升約 55%)旺上、更新(速度提升約 133%)和內存使用率(降低約 54%)等方面有了顯著的性能提升。
Vue 3 采用了"compiler-informed Virtual DOM"的方法:模板編譯器執(zhí)行激進的優(yōu)化并生成渲染函數(shù)代碼糖埋,以提升靜態(tài)內容訪問速度宣吱,為綁定類型留下 runtime 提示。最重要的是瞳别,將內部的動態(tài)節(jié)點扁平化處理征候,以降低 runtime 遍歷的成本。因此祟敛,用戶可以獲得兩全其美的效果:通過模板優(yōu)化編譯器的性能疤坝,或者在用例需要時通過手動渲染函數(shù)直接控制。
改進與 TypeScript 的集成
Vue 3 使用 TypeScript 編寫垒棋,具有自動生成卒煞、測試和捆綁的類型定義等特性。Composition API 可與類型推導很好地搭配使用叼架。Vetur畔裕,Vue 3 的官方 VSCode 擴展衣撬,現(xiàn)在支持模板表達式,以及利用 Vue 3 改進的內部類型進行 props 類型檢查扮饶。
實驗性功能
為單文件組件(SFC, Singe-File Components)具练,即 .vue 文件提供了兩項新特性:
-
<script setup>:
用于在 SFC 中使用 Composition API 的語法糖 -
<style vars>:
SFC 中狀態(tài)驅動的 CSS 變量
上述已在 Vue 3.0 中實現(xiàn)并可用,但僅出于收集反饋的目的而提供甜无。在合并 RFC 之前扛点,它們將保持實驗性狀態(tài)。
此外還實現(xiàn)了一個當前未記錄的<Suspense>組件岂丘,該組件允許在初始渲染或分支切換時等待嵌套的異步依賴項(異步組件或包含async setup()的組件)陵究。目前正在與 Nuxt.js 團隊一起測試和迭代此功能(即將在 Nuxt 3發(fā)布),并且可能會在 3.1 中到達穩(wěn)定奥帘。
下一步
發(fā)布后的短期內铜邮,開發(fā)團隊將專注于:
- 版本遷移
- 支持 IE11
- 新 devtools 中的路由和 Vuex 集成
- 對 Vetur 中模板類型推導的進一步改進
目前,Vue 3 和 v3-targeting 項目的文檔網站寨蹋、GitHub 分支和 npm dist 標簽將保持 next-denoted 狀態(tài)松蒜。這意味著使用npm install vue命令仍會安裝 Vue 2.x,而要安裝 Vue 3 需使用npm install vue@next命令已旧。官方計劃在 2020 年底前將所有的 doc 鏈接秸苗、分支和 dist 標簽都切換為默認 3.0。
同時运褪,團隊已開始啟動 2.7 的開發(fā)工作計劃惊楼,這將是 2.x 的最后一個次要版本。2.7 將向后移植來自 v3 的兼容改進吐句,并會提示有關 v3 中已刪除/更改的 API 使用情況的警告胁后。團隊表示計劃在 2021 年第一季度開發(fā) 2.7店读,發(fā)布后將直接變?yōu)?LTS 版本嗦枢,具有 18 個月的維護周期。