一、檢測機制
- vue2中基于Object.defineProperty的observer實現,vue3中則基于Proxy
的observer實現- 對屬性的添加、刪除動作的監測
- 對數組基于下標的修改,對于length修改的監測
- 對Map、Set的支持
- 默認為惰性監測
1、 在2.x版本中,響應式數據都會在啟動的時候進行監測,如果數據量較大,會有嚴重的性能消耗
2、 在3.x版本中,只有應用初始可見部分所用到的數據會被監測到 - 更精準的變動通知:
1、在2.x版本中,通過Vue.set強制添加一個新的屬性,所有依賴這個對象的watch函數都被執行一次
2、在3.x中,只有依賴這個具體屬性的watch函數被通知 - 更好的調試:
1、通過使用新增的renderTracked和renderTriggered鉤子,可以精確的追蹤到一個組件發生重新渲染的觸發時機及原因 - 暴露出observable的api來創建響應式對象,可以替代掉event bus,做一些跨組件的通信
二、性能優化
- 組件渲染:
1、在2.x版本中,父組件重新渲染時,其子組件也必須重新渲染(前提是修改的數據是子組件的props,才會觸發子組件的重新渲染)
2、在3.x版本中,可以單獨重新渲染子組件或者父組件 - 靜態樹提升
1、 在3.x版本中,編譯器可以檢測到靜態組件,將其提升,降低渲染成本 - 靜態屬性提升
三、合成API(Composition API)
-
安裝使用
n.png
u.png -
示例
示例 -
代碼復用三種方法比較
01.png
02.png
03.png
https://vue-composition-api-rfc.netlify.com/api.html
https://vue-composition-api-rfc.netlify.com/api.html#setup
https://segmentfault.com/a/1190000020205747?utm_source=tag-newest