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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TinyML 边缘智能:在资源受限 MCU 上部署 AI

前言 在物联网(IoT)和智能边缘计算的时代浪潮下,TinyML(微型机器学习)正以前所未有的速度改变着我们与设备交互的方式。它将 AI 推理能力放在资源极度受限的 MCU(微控制器)上,兼顾实时性、低功耗和数据隐私,成为智能家居、可穿戴设备、工业检测等场景的核心技术。尽管…

技术白皮书:Oracle GoldenGate 优势

本文为技术白皮书Oracle GoldenGate 优势的翻译及阅读笔记。以下注释中GoldenGate为OGG。 副标题为:Oracle 数据库的变更数据捕获 (CDC) 技术比较。版本为July, 2021, Version 2.1。 Oracle GoldenGate 被客户和分析师公认为功能最齐全、性能最高、最值得信赖的数…

Android控件VideoView用法

一 控件UI <VideoViewandroid:id="@+id/videoView"android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="fitCenter" /> 二 配置 <?xml version="1.0" encoding="u…

React 第三十六节 Router 中 useParams 的具体使用及详细介绍

一、useParams 的基本用法 用途&#xff1a;用于在组件中获取当前 URL 的动态路由参数&#xff08;如 /user/:id 中的 id&#xff09;。 import { Routes, Route, useParams } from react-router-dom;// 定义路由 function App() {return (<Routes><Route path"…

C++战胜白蚁 2024年信息素养大赛复赛 C++小学/初中组 算法创意实践挑战赛 真题详细解析

目录 C++战胜白蚁 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、 推荐资料 1、C++资料 2、Scratch资料 3、Python资料 C++战胜白蚁 2024年信息素养大赛 C++复赛真题 一、题目要求 1、编程实现 小明因为很长…

Linux网络编程 day4

inet_pton&#xff1a;IP 字符串 → 网络字节序地址 ntohl&#xff1a;网络字节序 → 主机字节序 TCP状态转换图(重点) 可以通过下面这行代码查看目前网络状态 netstat -apn | grep client 1、主动发起请求端 close-->SYN-->SYN_SENT-->接收ACK、SYN-->SYN_SEN…

基于springboot+vue的个人财务管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat12开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系统展示 用户信息管理 账…

ffmpeg 元数据-avformatcontext字段 AVDictionary *metadata;

ffmpeg 元数据 1. 解释什么是ffmpeg元数据 ffmpeg元数据是指与音视频文件相关的附加信息&#xff0c;这些信息不直接影响音视频内容的播放&#xff0c;但提供了关于文件内容、创作者、版权、播放参数等的有用信息。元数据在音视频文件的处理、管理和共享中起着重要作用。 2.…

55.[前端开发-前端工程化]Day02-包管理工具npm等

包管理工具详解 npm、yarn、cnpm、npx、pnpm 1 npm包管理工具 代码共享方案 包管理工具npm 2 package配置文件 npm的配置文件 方式二 常见的配置文件 常见的属性 常见的属性 常见的属性 依赖的版本管理 常见属性 npm install 命令 项目安装 3 npm install原理 npm instal…

Spring MVC @RequestBody 注解怎么用?接收什么格式的数据?

RequestBody 注解的作用 RequestBody 将方法上的参数绑定到 HTTP 请求的 Body&#xff08;请求体&#xff09;的内容上。 当客户端发送一个包含数据的请求体&#xff08;通常在 POST, PUT, PATCH 请求中&#xff09;时&#xff0c;RequestBody 告诉 Spring MVC 读取这个请求体…

海外平台短剧批量混剪自动剪辑智能去重与多语言适配方案解析

一、引言&#xff1a;全球化内容分发的技术挑战 在短剧出海的浪潮中&#xff0c;如何通过标准化技术流程实现「高效生产 合规分发」成为行业关键课题。本文结合 TikTok、YouTube 等平台的运营经验&#xff0c;解析基于智能去重算法、多语言字幕生成、动态元素叠加的全流程解决…

stm32 hal库 SPI使用(二)硬件SPI的HAL库函数调用

使用硬件SPI1&#xff0c;开启DMA&#xff0c;软件NSS。 1.使用硬件spi后&#xff0c;spi.c文件里会自动生成SPI_HandleTypeDef hspi1句柄&#xff0c;并且在main.c中自动使用MX_SPI1_Init&#xff08;&#xff09;函数对hsp1句柄赋值和SPI初始化 void MX_SPI1_Init(void) {h…

ES类的索引轮换

通过以下请求方法创建一个名为 “tiered-storage-policy” 的 ISM policy&#xff1a; PUT _plugins/_ism/policies/tiered-storage-policy {"policy": {"description": "Changes replica count and deletes.","schema_version": 1,…

51LA使用方法与悟空统计,网站数据分析的双重选择

在网站运营与数据分析领域&#xff0c;51LA作为国内较早的流量统计工具&#xff0c;曾为许多用户提供基础的访问数据监测服务。然而&#xff0c;随着技术的发展和用户需求的升级&#xff0c;越来越多的企业开始寻求功能更全面、体验更优的统计工具。小编今天将给大家介绍一款更…

go语言实现用户管理系统

goweb实现用户管理系统 用户后台管理系统功能描述 登录功能 支持用户通过邮箱密码和密码进行登录。对输入的邮箱和密码进行验证&#xff0c;确保用户信息的正确性。登录成功后&#xff0c;更新用户的今日登录统计信息&#xff0c;并将用户信息存入会话&#xff08;cookie&am…

Elasticsearch:RAG 和 grounding 的价值

作者&#xff1a;来自 Elastic Toms Mura 了解 RAG、grounding&#xff0c;以及如何通过将 LLM 连接到你的文档来减少幻觉。 更多阅读&#xff1a;Elasticsearch&#xff1a;在 Elastic 中玩转 DeepSeek R1 来实现 RAG 应用 想获得 Elastic 认证吗&#xff1f;查看下一期 Elast…

【黑马JavaWeb+AI知识梳理】后端Web基础01 - Maven

Maven Maven核心 Maven概述 定义&#xff1a; Maven是一款用于管理和构建Java项目的工具&#xff0c;是apache旗下的一个开源项目&#xff0c;基于项目对象模型&#xff08;POM&#xff0c;project object model&#xff09;的概念&#xff0c;通过一小段描述信息来管理项目的…

C语言易混淆知识点详解

C语言中容易混淆的知识点详解 C语言作为一门基础且强大的编程语言&#xff0c;有许多容易混淆的概念和特性。以下是C语言中一些常见易混淆知识点的详细解析&#xff1a; 1. 指针与数组 相似点&#xff1a; c 复制 下载 int arr[10]; int *ptr arr; 都可以使用[]运算符访…

MCP原理详解及实战案例(动嘴出UI稿、3D建模)

文章目录 MCP 原理介绍架构核心组件协议层传输层连接生命周期MCP与function calling: 互补关系 MCP python SDKMCP的优点 怎么用MCP&#xff1a;天气服务参考应用项目&#xff1a; REF 24年11月份&#xff0c;claude推出了模型上下文协议( MCP),作为一种潜在的解决方案&#xf…

2025年深圳杯数学建模(东三省)B题【颜色转换】原论文讲解(含完整python代码)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2025年深圳杯数学建模&#xff08;东三省&#xff09;B题【颜色转换】完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成…