文章目錄
- 前言
- 1. 精細化依賴追蹤
- 2. 高效的依賴收集與觸發
- 3. 自動內存管理,防止內存泄漏
- 4. 支持復雜場景
前言
在 mini vue - effect 實現中
設計(WeakMap → Map → Set → effect函數)有以下幾個重要原因:
1. 精細化依賴追蹤
- WeakMap 的 key 是響應式對象(target),這樣每個響應式對象都能單獨管理自己的依賴。
- Map 的 key 是屬性名(key),這樣每個屬性都能單獨追蹤依賴于它的 effect。
- Set 存儲 effect 函數,保證同一個屬性不會重復收集同一個 effect。
這樣可以做到:
- 只有被訪問的屬性才會收集依賴,屬性級別的精細追蹤。
- 當某個屬性變化時,只通知依賴它的 effect,避免無關 effect 被觸發,提高性能。
2. 高效的依賴收集與觸發
- 通過 targetMap 可以快速定位到某個對象的依賴表。
- 通過 depsMap 可以快速定位到某個屬性的依賴集合。
- 通過 Set 可以高效去重和遍歷所有依賴 effect。
3. 自動內存管理,防止內存泄漏
- 使用 WeakMap,響應式對象被銷毀時,相關依賴會自動被垃圾回收,無需手動清理。
- 如果用普通 Map,響應式對象即使被銷毀,依賴關系還會殘留在內存中,導致內存泄漏。
4. 支持復雜場景
- 這種結構可以支持任意數量的響應式對象、任意數量的屬性、任意數量的 effect,擴展性極強。
- 也是實現 computed、watch、組件依賴等復雜響應式場景的基礎。
總結:
這種 WeakMap → Map → Set 的設計,是為了實現高效、精細、自動管理內存的依賴收集系統,是 Vue3 響應式系統的核心基礎。