但是在插入、刪除和排序數組時,數據元素的位置會移動,導致每個元素的getter和setter頻繁調用,嚴重影響性能!因此,Vue2放棄使用監聽數組!
Object.defineProperty()的真正問題是您無法監視初始化期間未設置的鍵值!
這就是為什麽Vue2必須重寫array的方法並提供Vue.set等API的原因。
此外,Object.defineProperty()需要在開始時初始化遞歸遍歷和循環監視,這也是性能瓶頸之壹。
正是因為這些歷史問題,Vue3才會存在。
Object.defineProperty()是重寫對象的關鍵,而Proxy只攔截讀寫操作。
Vue3使用lazy proxy解決深度嵌套問題,只需要遍歷第壹層的屬性!
當插入、刪除和排序數組時,代理getter/setter仍然會被多次觸發。那麽Vue3做了哪些優化呢?