vue3源碼閱讀

看源碼時候做的筆記-----------

 

 

1.targetMap 爲什麼是 weakMap,WeakMap 和 Map有什麼區別?

Map 是由 key 數組和 value 數組構成,遍歷時,先遍歷 key, 找到 index , 然後再從 value 數組取值。兩個很大的缺點:

  a) 賦值和搜索操作都是 O(n) 的時間複雜度( n 是鍵值對的個數),因爲這兩個操作都需要遍歷全部整個數組來進行匹配。

  b) 是可能會導致內存泄漏,因爲數組會一直引用着每個鍵和值。這種引用使得垃圾回收算法不能回收處理他們,即使沒有其他任何引用存在了。

WeakMap 對象是一組鍵/值對的集合,其中的鍵是弱引用的,因爲是弱引用,所以key不可被枚舉,如果key 是可枚舉的話,其列表將會受垃圾回收機制的影響,從而得到不確定的結果。其鍵必須是對象,而值可以是任意的。

  a) WeakMap 持有的是每個鍵對象的“弱引用”,而弱引用的對象,垃圾回收機制不考慮對該對象的引用,這意味着在沒有其他引用存在時垃圾回收能正確進行。

  原生 WeakMap 的結構是特殊且有效的,其用於映射的 key 只有在其沒有被回收時纔是有效的。

effec.ts 中,Dep是個set,KeyToDepMap 是個 Map,targetMap 是個WeakMap。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章