当前位置: 首页 > news >正文

Vue3源码学习4-effect中为什么使用WeakMap,Set?

文章目录

  • 前言
      • 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 响应式系统的核心基础。

相关文章:

  • 深入理解 MyBatis 代理机制
  • 数据结构6 · BinaryTree二叉树模板
  • 【51单片机8位数码管动态显示、右向左流水显示】2022-4-16
  • OpenHarmony - 驱动使用指南,HDF驱动开发流程
  • C++11新特性_标准库_std::array
  • 51c嵌入式~电路~合集4
  • 《AI大模型应知应会100篇》第44篇:大模型API调用最佳实践(附完整代码模板)
  • 计算机基础:二进制基础16,八进制加法
  • 虚拟局域网(VLAN)实验(Cisco Packet Tracer)-路由器、交换机的基本配置
  • 关于CSDN创作的常用模板内容
  • 从括号匹配看栈:数据结构入门的实战与原理
  • CSS 架构与命名规范
  • HTTPS协议:更安全的HTTP
  • 基于深度学习的毒蘑菇检测
  • [android]MT6835 Android 关闭selinux方法
  • Cesium 环境搭建
  • STM32复盘总结——芯片简介
  • 工作记录 2017-12-12 + 在IIS下发布wordpress
  • 第二十周:项目开发中遇到的相关问题(一)
  • 【数据结构】堆的完整实现
  • 艺术开卷|韩羽读齐白石:妙在似与不似之间
  • 菏泽家长“付费查成绩”风波调查:免费功能被误读
  • “五一”假期首日迎出游高峰:火车站人流“堪比春运”,热门景区门票预订量同比增三成
  • 停电催生商机,中国品牌 “照亮” 西班牙
  • 光明日报社论:用你我的匠心,托举起繁盛的中国
  • 万达电影去年净利润亏损约9.4亿元,计划未来三年内新增25块IMAX银幕