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

Vue 页面频繁重渲染,性能为什么这么差?

文章目录

    • 前言
    • 什么是“无意义的重渲染”?
      • 常见场景
    • Vue 响应式是如何“牵一发动全身”的?
      • 问题根源
    • computed / watch 用错,是性能杀手
      • 错误示例
      • 正确做法
    • v-memo:Vue 3 的“性能核武器”
      • 示例
    • shallowRef:大对象的救命稻草
      • 普通 ref
      • shallowRef
    • 拆分组件粒度,才是真正的解法
      • 问题代码
      • 优化思路
    • 实战:减少 70% 重渲染次数

前言

如果说长列表卡是“肉眼可见的慢”,那重渲染问题就是那种:

页面不卡,但 CPU 飙高
操作没问题,但风扇狂转

而且这种问题,非常隐蔽

什么是“无意义的重渲染”?

简单说一句:

数据没变,但组件又 render 了一遍。

常见场景

  • 父组件 state 变化
  • 子组件全部跟着重新执行 setup / render
  • computed / watch 被反复触发

Vue 响应式是如何“牵一发动全身”的?

Vue 的响应式是依赖收集 + 派发更新

问题根源

conststate=reactive({user:{name:'',age:0},settings:{theme:'dark'}})

如果你在组件里这样用:

state.user.name

一旦state.user发生变化,整个依赖都会被标记为脏

computed / watch 用错,是性能杀手

错误示例

watch(state,()=>{doSomethingHeavy()},{deep:true})

问题:

  • 任意字段变化都会触发
  • 深度监听成本极高

正确做法

watch(()=>state.user.name,()=>{doSomething()})

监听越精确,性能越好。

v-memo:Vue 3 的“性能核武器”

v-memo可以直接告诉 Vue:

这个组件,只在某些依赖变化时才重新渲染。

示例

<div v-memo="[item.id]"> {{ item.name }} </div>

只要item.id不变,这个节点就不会重新渲染。

shallowRef:大对象的救命稻草

普通 ref

constdata=ref(hugeObject)

Vue 会递归追踪所有字段。

shallowRef

constdata=shallowRef(hugeObject)

只关心引用变化,不追踪内部结构

适合:

  • 大列表数据
  • 三方 SDK 返回对象
  • 不需要深度响应的数据

拆分组件粒度,才是真正的解法

问题代码

<BigList :list="list" />

父组件任何更新,BigList都会重新渲染。

优化思路

  • 拆成 Item 组件
  • 用 props 精确传递
  • 避免无关 state 传递

实战:减少 70% 重渲染次数

通过:

  • 精准 watch
  • v-memo
  • shallowRef
  • 组件拆分

实测:

  • render 次数下降 ~70%
  • CPU 占用明显下降
  • 页面交互更稳定
http://www.jsqmd.com/news/90055/

相关文章:

  • OnmyojiAutoScript终极指南:2025年阴阳师自动化脚本完全配置手册
  • wvp-GB28181-pro终极指南:3分钟完成Docker容器化部署
  • PiliPlus终极体验指南:解锁B站第三方客户端的完整功能指南
  • Zotero-GPT插件API配置全流程解析与故障排查
  • GridPlayer多视频同步播放器:专业级分屏播放解决方案
  • 关于 AI 软件测试,你必须知道的 5 个惊人真相
  • 网盘直链下载助手:解锁高速下载的实用技巧
  • 环世界性能优化终极指南:如何让后期游戏告别卡顿重获新生
  • Pyarmor解密工具:无需运行即可静态解密Python加密脚本的终极方案
  • 如何快速掌握BetterNCM安装器:音乐爱好者的终极工具指南
  • 照片元数据管理革命:ExifToolGui如何让专业操作变得像刷朋友圈一样简单
  • 7个Maccy剪贴板管理器使用技巧:从新手到高手快速上手
  • 心电图AI分析终极指南:基于深度学习的完整解决方案
  • livox mid-70采集点云数据
  • PlugY插件:暗黑破坏神2单机体验的革命性增强
  • Pyarmor-Static-Unpack-1shot:无需运行即可处理加密Python脚本的解决方案
  • 报错分析:注册通知例程达上限
  • 哔哩下载姬DownKyi:打造个人专属B站内容宝库的终极方案
  • Calibre-Douban插件:一键获取豆瓣图书元数据的终极解决方案
  • Cursor AI Pro功能全解锁:3步突破试用限制的实战指南
  • TrafficMonitor插件系统:打造个性化Windows任务栏监控中心的完整指南
  • 基于Springboot学校物资管理系统【附源码+文档】
  • LumenPnP开源贴片机:解决小批量电子组装难题的智能方案
  • 百度网盘第三方客户端终极方案:告别限速的完整指南
  • AutoGPT水质检测报告生成器
  • GmsCore架构解构:从依赖注入到权限控制的逆向工程
  • Free-NTFS-for-Mac完全指南:苹果电脑免费读写NTFS磁盘终极方案
  • 基于微信小程序的在线家教预约系统毕业设计
  • 2025年12月最新降AI攻略!论文Ai率89%降到5%,低成本降低AI
  • 论文AIGC查重率高怎么办?如何降ai率?