当前位置:首页 > 技术分析 > 正文内容

提升vue项目性能的方法有哪些

ruisui881个月前 (03-29)技术分析11


提升 Vue 项目(特别是 Vue 3)的性能需要在开发、构建和运行时多个层面进行优化。以下是经过实践验证的常用方法,涵盖代码优化、组件设计、构建配置以及运行时策略,帮助你降低内存占用、加快渲染速度并提升用户体验:


1.代码层面的优化

组件优化

  • 按需加载组件

使用 defineAsyncComponent 实现动态导入,减少初次加载的代码量。

示例:

const MyComponent = defineAsyncComponent(() => import('./MyComponent.vue'));
  • 减少不必要渲染

使用 v-show 替代 v-if(仅隐藏而不销毁组件)。

使用 v-memo(Vue 3.2+)缓存静态内容:

{{ expensiveComputation() }}

使用 v-once 标记只渲染一次的元素。

  • 清理副作用

在 onUnmounted 中移除事件监听器和定时器,避免内存泄漏:

onUnmounted(() => {
  window.removeEventListener('resize', handleResize);
  clearInterval(timer);
});

数据管理

  • 优化 reactive 和 ref

避免对大数据对象使用 reactive,改用 ref 或普通对象,只代理必要部分:

const largeData = ref(null); // 仅包装关键数据

使用 shallowReactive 或 shallowRef 减少深层代理开销:

const state = shallowReactive({ nested: { a: 1 } });
  • 计算属性(computed)

用 computed 缓存复杂计算,避免重复执行:

const filteredList = computed(() => list.value.filter(item => item.active));

2.渲染性能提升

虚拟列表

  • 对于大数据列表(如表格),使用虚拟滚动技术,只渲染可视区域:

推荐库:vue-virtual-scroll-list 或 @vueuse/core 的虚拟滚动工具。

示例:

分页加载

  • 将大数据拆分为分页加载,配合后端 API:
  const page = ref(1);
  const pageSize = 20;
  const tableData = ref([]);
  async function loadData() {
    const res = await fetch(`/api/data?page=${page.value}&size=${pageSize}`);
    tableData.value = await res.json();
  }

避免频繁 DOM 操作

  • 使用 nextTick 确保 DOM 更新批量执行:
  import { nextTick } from 'vue';
  async function updateData() {
    data.value = newData;
    await nextTick(); // 等待 DOM 更新完成
    console.log('DOM updated');
  }

3.构建优化

打包工具配置

  • Tree Shaking

确保 Vite 或 Webpack 开启 Tree Shaking,移除未使用的代码。

Vite 默认支持,Webpack 需配置 sideEffects:

{
  "sideEffects": false
}
  • 分包加载

使用 manualChunks(Vite)或 splitChunks(Webpack)分离第三方库:

// vite.config.js
export default {
  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          'vendor': ['vue', 'axios']
        }
      }
    }
  }
};
  • 压缩资源

启用生产模式压缩 JS、CSS 和图片:

// vite.config.js
export default {
  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          'vendor': ['vue', 'axios']
        }
      }
    }
  }
};

按需引入第三方库

  • 避免全局引入,例如 element-plus:
  import { ElButton, ElTable } from 'element-plus';
  app.use(ElButton).use(ElTable);

4.运行时性能优化

Web Worker

  • 将复杂计算(如数据排序、过滤)移到 Web Worker,减轻主线程负担:
  const worker = new Worker('/worker.js');
  worker.postMessage(largeData);
  worker.onmessage = (e) => console.log('Result:', e.data);

路由优化

  • 懒加载路由

使用动态导入减少初始加载:

const routes = [
  {
    path: '/dashboard',
    component: () => import('./views/Dashboard.vue')
  }
];
  • 控制 keep-alive

限制缓存组件数量,避免内存占用过高:


  

CDN 加速

  • 将 Vue、Element Plus 等静态资源通过 CDN 加载,减少本地打包体积:
  <script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>

5.服务端配合

  • 减少前端负担

将数据处理(如过滤、排序)交给后端 API,前端只负责展示。

  • 启用压缩

配置服务器使用 Gzip 或 Brotli 压缩响应数据:

gzip on;
gzip_types application/javascript text/css;
  • 缓存策略

对静态资源设置强缓存(Cache-Control: max-age=31536000),对 API 数据设置协商缓存。


6.性能监控与验证

  • 使用工具验证优化效果Vue Devtools:检查组件渲染时间。 Lighthouse:分析页面加载性能。 Chrome Performance:记录运行时开销。
  • 生产环境监控: 集成 Sentry 或自定义日志,跟踪慢请求和内存峰值。

总结

  • 轻量化:按需加载、减少冗余代码。
  • 高效渲染:虚拟列表、分页、缓存计算。
  • 构建优化:分包、压缩、CDN。
  • 运行时:Web Worker、路由优化。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3130.html

分享给朋友:

“提升vue项目性能的方法有哪些” 的相关文章

Slackware 15.0?发布:历史最久且在维护的Linux发行版本

Slackware 14.0 于 2012 年发布,在经过了数年的等待之后 Slackware 15.0 发行版本于今天正式发布。Slackware 于 1993 年发布,是目前历史最悠久、且仍在维护的 Linux 发行版本。Slackware 15.0 在去年进入测试阶段,在发布几个候选版本之后终...

2021最全VUE面试题,奥利给

1. vue-router用过没,哪些常用的钩子函数路由钩子的执行流程,钩子函数种类有:全局守卫、路由守卫、组件守卫。首页可以控制导航跳转, beforeEach , afterEach 等,?般?于页? title 的修改。?些需要登录才能调整??的重定向功能。beforeEach 主要有3个参数...

gitlab简单搭建与应用

一、gitlab1、简介GitLab是利用Ruby on Rails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。与Github类似,GitLab能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历...

一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问

问题现象7月25号,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值85%),而我们是按容器内存60%(9.6G)的比例配置的JVM堆内存。看了下其它服务,同样的堆内存配置,它们内存占用约70%~79%,此服务比其它服务内存占用稍大。那为什么此服务内存占用稍大...

html5+css3做的响应式企业网站前端源码

大家好,今天给大家介绍一款,html5+css3做的响应式企业网站前端源码 (图1)。送给大家哦,获取方式在本文末尾。首页banner幻灯片切换特效(图2)首页布局简约合理(图3)关于我们页面(图4)商品列表(图5)商品详情(图6)服务介绍(图7)新闻列表(图8)联系我们(图9)源码完整,需要的朋友...

深度解析!AI智能体在To B领域应用,汽车售后服务落地全攻略

在汽车售后服务领域,AI智能体的应用正带来一场效率和专业度的革命。本文深度解析了一个AI智能体在To B领域的实际应用案例,介绍了AI智能体如何通过提升服务顾问和维修技师的专业度及维修效率,优化汽车售后服务流程。上周我分享了AI智能体+AI小程序To C的AI应用场景《1000%增长!我仅用一个小时...