一、檢測機(jī)制
- vue2中基于Object.defineProperty的observer實(shí)現(xiàn),vue3中則基于Proxy
的observer實(shí)現(xiàn)- 對屬性的添加、刪除動作的監(jiān)測
- 對數(shù)組基于下標(biāo)的修改,對于length修改的監(jiān)測
- 對Map、Set的支持
- 默認(rèn)為惰性監(jiān)測
1、 在2.x版本中,響應(yīng)式數(shù)據(jù)都會在啟動的時候進(jìn)行監(jiān)測,如果數(shù)據(jù)量較大,會有嚴(yán)重的性能消耗
2、 在3.x版本中,只有應(yīng)用初始可見部分所用到的數(shù)據(jù)會被監(jiān)測到 - 更精準(zhǔn)的變動通知:
1、在2.x版本中,通過Vue.set強(qiáng)制添加一個新的屬性,所有依賴這個對象的watch函數(shù)都被執(zhí)行一次
2、在3.x中,只有依賴這個具體屬性的watch函數(shù)被通知 - 更好的調(diào)試:
1、通過使用新增的renderTracked和renderTriggered鉤子,可以精確的追蹤到一個組件發(fā)生重新渲染的觸發(fā)時機(jī)及原因 - 暴露出observable的api來創(chuàng)建響應(yīng)式對象,可以替代掉event bus,做一些跨組件的通信
二、性能優(yōu)化
- 組件渲染:
1、在2.x版本中,父組件重新渲染時,其子組件也必須重新渲染(前提是修改的數(shù)據(jù)是子組件的props,才會觸發(fā)子組件的重新渲染)
2、在3.x版本中,可以單獨(dú)重新渲染子組件或者父組件 - 靜態(tài)樹提升
1、 在3.x版本中,編譯器可以檢測到靜態(tài)組件,將其提升,降低渲染成本 - 靜態(tài)屬性提升
三、合成API(Composition API)
-
安裝使用
n.png
u.png -
示例
示例 -
代碼復(fù)用三種方法比較
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





