首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >除了循环引用,Vue3还有哪些常见的性能优化技巧?

除了循环引用,Vue3还有哪些常见的性能优化技巧?

作者头像
小焱写作
发布2025-09-03 15:43:55
发布2025-09-03 15:43:55
22900
代码可运行
举报
运行总次数:0
代码可运行

Vue3 提供了多种性能优化方法,以下是一些常见的优化技巧:

1. 虚拟列表(Virtual Scrolling)

当渲染大量数据列表时,使用虚拟列表只渲染可视区域的内容,显著减少 DOM 节点数量。 示例库vue-virtual-scrollervueuse/core

2. 组件懒加载(Async Components)

对于非关键组件或复杂组件,使用动态导入延迟加载:

代码语言:javascript
代码运行次数:0
运行
复制
<script setup>
import { defineAsyncComponent } from 'vue'

const HeavyComponent = defineAsyncComponent(() => import('./HeavyComponent.vue'))
</script>
3. 缓存组件(Keep-Alive)

使用 <Keep-Alive> 缓存频繁切换的组件,避免重复渲染:

代码语言:javascript
代码运行次数:0
运行
复制
<Keep-Alive>
  <RouterView />
</Keep-Alive>
4. 事件监听器优化

在不需要响应式的地方使用普通函数而非箭头函数。

避免在循环中绑定事件处理器,可通过事件代理优化:

代码语言:javascript
代码运行次数:0
运行
复制
<div @click="handleClick">
  <div v-for="item in list" :data-id="item.id">{{ item.name }}</div>
</div>

<script setup>
const handleClick = (e) => {
  const id = e.target.dataset.id
  if (id) {
    // 处理点击逻辑
  }
}
</script>
5. 计算属性缓存(Computed Caching)

利用计算属性的缓存特性,避免重复计算:

代码语言:javascript
代码运行次数:0
运行
复制
<script setup>
import { computed, ref } from 'vue'

const list = ref([1, 2, 3, 4, 5])
const evenNumbers = computed(() => list.value.filter(n => n % 2 === 0))
</script>
6. 避免响应式陷阱

对于大型静态数据(如常量配置),使用 markRaw() 避免转为响应式对象:

代码语言:javascript
代码运行次数:0
运行
复制
import { markRaw } from 'vue'

const largeStaticData = markRaw({ /* 大量数据 */ })

使用 shallowRef()shallowReactive() 创建浅层响应式对象。

7. 优化 v-for 指令
  • 始终为 v-for 提供唯一的 :key
  • 避免在同一元素上同时使用 v-forv-if(可通过计算属性过滤数据)。
8. 按需引入组件

对于大型组件库(如 Element Plus、Ant Design Vue),按需引入组件减少打包体积:

代码语言:javascript
代码运行次数:0
运行
复制
// vite.config.js
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  plugins: [
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
})
9. 优化响应式更新范围
  • 使用 reactive() 替代 ref() 包装复杂对象,减少嵌套层级。
  • 避免深层响应式更新,可通过拆分组件或使用 toRefs() 解耦数据。
10. 生产环境优化

使用 vitewebpack 等工具进行代码分割和 Tree-Shaking。

移除开发时的调试工具(如 console.log、Vue DevTools 钩子):

代码语言:javascript
代码运行次数:0
运行
复制
// vite.config.js
export default defineConfig({
  define: {
    __VUE_PROD_DEVTOOLS__: false,
  },
})
11. 服务端渲染(SSR)/ 静态站点生成(SSG)

对于内容型应用,使用 Vue Server RendererNuxt.js 提升首屏加载速度。

12. 使用 VueUse 工具库

VueUse 提供了许多性能优化的组合式函数,如 useIntersectionObserver 实现懒加载:

代码语言:javascript
代码运行次数:0
运行
复制
<script setup>
import { useIntersectionObserver } from '@vueuse/core'

const target = ref(null)
const { stop } = useIntersectionObserver(
  target,
  ([{ isIntersecting }]) => {
    if (isIntersecting) {
      // 元素进入视口时执行加载逻辑
      stop() // 停止监听
    }
  }
)
</script>

<template>
  <img ref="target" src="lazy-image.jpg" alt="懒加载图片" />
</template>
总结

根据应用场景选择合适的优化策略:

  • 大量数据渲染:优先使用虚拟列表。
  • 复杂组件:使用懒加载和缓存。
  • 频繁更新:优化响应式对象和计算属性。
  • 生产环境:做好打包优化和代码分割。

通过这些技巧,可以显著提升 Vue3 应用的性能和用户体验。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 虚拟列表(Virtual Scrolling)
  • 2. 组件懒加载(Async Components)
  • 3. 缓存组件(Keep-Alive)
  • 4. 事件监听器优化
  • 5. 计算属性缓存(Computed Caching)
  • 6. 避免响应式陷阱
  • 7. 优化 v-for 指令
  • 8. 按需引入组件
  • 9. 优化响应式更新范围
  • 10. 生产环境优化
  • 11. 服务端渲染(SSR)/ 静态站点生成(SSG)
  • 12. 使用 VueUse 工具库
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档