前置知识: Vue 3

Vue性能优化详解

00:00
1 min Advanced 2026/6/14

Vue 3性能优化详解:虚拟滚动、shallowRef、冻结数据、v-memo。

1. 响应式优化

1.1 shallowRef

// 大型对象不需要深层响应式
const bigData = shallowRef(loadHugeDataset());
// 只有 .value 赋值才触发更新
bigData.value = newData; // 触发
bigData.value.items.push(x); // 不触发

1.2 shallowReactive

const state = shallowReactive({
  items: [], // 不是响应式的
  count: 0, // 是响应式的(根级属性)
});

1.3 markRaw

const staticData = markRaw(largeObject);
// 永远不会转为响应式

1.4 Object.freeze

const frozenList = Object.freeze(hugeArray);
const items = ref(frozenList); // 跳过深层响应式转换

2. 渲染优化

2.1 v-memo

<div v-for="item in list" :key="item.id" v-memo="[item.selected]">
  <!-- 仅 item.selected 变化时重新渲染 -->
  <ExpensiveComponent :data="item" />
</div>

2.2 v-once

<h1 v-once>{{ title }}</h1>
<!-- 只渲染一次,后续更新跳过 -->

2.3 虚拟滚动

<template v-for="item in visibleItems" :key="item.id">
  <div :style="{ transform: `translateY(${offset}px)` }">{{ item.content }}</div>
</template>

推荐库:vue-virtual-scrollervue3-virtual-scroll-list

3. 组件优化

3.1 异步组件

const HeavyChart = defineAsyncComponent(() => import('./HeavyChart.vue'));

3.2 KeepAlive

<KeepAlive :include="['UserList', 'Settings']">
  <RouterView />
</KeepAlive>

4. 编译优化

Vue 3 编译器自动优化

  • 静态提升(Static Hoisting)
  • 补丁标记(Patch Flags)
  • (Block Tree)
  • 静态属性提升

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式