news 2026/4/7 15:09:57

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 占用明显下降
  • 页面交互更稳定
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/31 21:24:33

环世界性能优化终极指南:如何让后期游戏告别卡顿重获新生

环世界性能优化终极指南&#xff1a;如何让后期游戏告别卡顿重获新生 【免费下载链接】Performance-Fish Performance Mod for RimWorld 项目地址: https://gitcode.com/gh_mirrors/pe/Performance-Fish 还在为《环世界》后期卡成幻灯片而苦恼吗&#xff1f;当你的殖民地…

作者头像 李华
网站建设 2026/3/27 18:42:14

Cursor免费使用技巧:轻松解锁AI编程工具的增强功能

Cursor免费使用技巧&#xff1a;轻松解锁AI编程工具的增强功能 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial …

作者头像 李华
网站建设 2026/4/3 2:46:37

哔哩下载姬DownKyi:打造个人专属B站内容宝库的终极方案

还在为B站视频无法离线观看而烦恼&#xff1f;想要建立属于自己的媒体资料库&#xff1f;哔哩下载姬DownKyi将为你开启全新的视频管理体验&#xff0c;让精彩内容随时随地触手可及&#xff01; 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具…

作者头像 李华
网站建设 2026/4/5 15:29:48

Zotero Linter:如何让杂乱文献库在30分钟内焕然一新?

Zotero Linter&#xff1a;如何让杂乱文献库在30分钟内焕然一新&#xff1f; 【免费下载链接】zotero-format-metadata Linter for Zotero. An addon for Zotero to format item metadata. Shortcut to set title rich text; set journal abbreviations, university places, an…

作者头像 李华
网站建设 2026/4/5 21:09:10

降ai率攻略测评:体验多款降AI率工具后,笔话降AI是真香!

论文AIGC率过高是当前很多学生和研究者在论文写作中遇到的普遍问题。别慌&#xff0c;只要掌握正确的方法&#xff0c;完全可以将AI生成痕迹有效降低&#xff0c;顺利通过AIGC检测。 一、AIGC检测原理是什么&#xff1f; 为什么自己写的论文AIGC检测会超标&#xff0c;一个一…

作者头像 李华