惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
博客园 - 司徒正美
博客园_首页
Jina AI
Jina AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
I
InfoQ
M
MIT News - Artificial intelligence
T
Tailwind CSS Blog
L
LangChain Blog
Last Week in AI
Last Week in AI
A
About on SuperTechFans
B
Blog
博客园 - 叶小钗
雷峰网
雷峰网
H
Help Net Security
WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
博客园 - 【当耐特】
云风的 BLOG
云风的 BLOG
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - 且行且思

Win11 家庭版 远程桌面连接-突然发生身份验证错误,(错误代码: 0x800706be) — 通过添加windows凭证解决 Cesium 加载 3dtiles ,实现球体旋转、模型定位 Tomcat服务自动关闭 , 定时检查并重启 用echarts打造会转的立体饼图 BaseMetas Fileview在线文件预览解决方案 ECharts GL | 3D 地图区域高度设置 物联网智慧平台 蚂蚁地理空间数据可视化 - 基于 WebGL 的开源大规模地理空间数据可视分析引擎。 主流开源JS地图框架选择 kk-anti-reptile 是适用于基于 spring-boot 开发的分布式系统的开源反爬虫接口防刷组件。 NProgress 给 Vue 路由切换加个 “假” 进度条提升用户体验 只会 !important 改 UI? Vue 深度选择器解法 JAVA 对于class文件反编译,CFR 通常能产生最完整的代码。 用AI辅助设计登录页 免费白嫖Claude 4小技巧 Jmeter压测工具入门篇 性能工具之 JMeter 快速入门 高并发压力测试工具清单 Nginx 单机多实例负载均衡 IntelliJ IDEA 中 Shared Build Process Heap Size 的重要性与配置 微信小程序实现流式传输(打字机效果)
一个watch让页面卡成PPT?
且行且思 · 2025-11-06 · via 博客园 - 且行且思

watch使用不当,轻则内存占用飙升,重则页面卡顿、响应延迟。尤其在监听大型嵌套对象时,滥用deep: true会触发全量遍历,造成严重的性能损耗。

根本问题在于:只要对象内部任意层级的属性发生变化,无论是否相关,都会执行回调。这种“无差别监听”在高频更新场景下极易拖垮应用。


方案一:精准监听,直击目标字段

避免监听整个对象,改为追踪具体路径:

watch(
  () => state.config.user.settings.theme,
  (newTheme) => {
    applyTheme(newTheme);
  }
)

仅当目标属性变化时触发,彻底规避深度遍历开销。


方案二:借助computed收敛依赖

将需监听的多个字段聚合为一个计算状态:

const userInfo = computed(() => ({
  username: state.profile.name,
  level: state.profile.level
}))

watch(
  userInfo,
  ({ username, level }) => {
    updateBadge(username, level);
  }
)

虽然监听仍需deep,但依赖范围被严格限定,极大降低遍历成本。


方案三:多源监听,显式声明依赖

使用数组形式同时监听多个响应式路径:

watch(
  [
    () => form.data.password,
    () => form.data.confirmPassword
  ],
  ([pwd, confirm]) => {
    validatePassword(pwd, confirm);
  }
)

无需开启deep,无递归遍历,性能最优,适合关联性弱但需统一处理的字段。


总结

策略优势注意点
精准监听 零遍历,最高性能 仅适用于单一路径
computed聚合 逻辑集中,依赖明确 需配合deep,但范围可控
多源监听 语法清晰,无需deep 适合多个独立字段

核心原则:拒绝全量扫描,监听粒度越细越好。
deep: true不是银弹,盲目使用只会让应用越来越慢。