第19篇:性能优化策略与实践

news/2025/2/24 22:47:01

目标:掌握 Vue3 性能优化的核心方法与实战技巧


1. 性能分析工具
  1. Chrome DevTools - Performance
    • 录制运行时性能
    • 分析长任务(Long Tasks)和内存泄漏
  2. Vue DevTools - Performance
    • 组件渲染耗时分析
    • 时间线跟踪
  3. Lighthouse
    • 生成性能评分报告
    • 识别阻塞资源、未压缩文件等问题

2. 代码体积优化
  1. Tree Shaking(Vite默认支持)
    javascript">// 按需引入组件库  
    import { Button } from 'ant-design-vue'  
    
  2. 代码分割(动态导入)
    javascript">const HeavyComponent = defineAsyncComponent(() =>  
      import('./HeavyComponent.vue')  
    )  
    
  3. Gzip/Brotli压缩
    # vite.config.js 配置  
    import viteCompression from 'vite-plugin-compression'  
    plugins: [viteCompression({ algorithm: 'brotliCompress' })]  
    

3. 渲染优化
  1. v-for 优化
    <template>  
      <!-- 始终指定唯一key -->  
      <div v-for="item in list" :key="item.id">{{ item.name }}</div>  
    
      <!-- 虚拟滚动处理长列表 -->  
      <VirtualList :items="bigData" :item-size="50" />  
    </template>  
    
  2. 减少响应式依赖
    javascript">// 冻结不需要响应式的大对象  
    const staticData = Object.freeze(largeData)  
    
  3. 组件懒加载
    javascript">// 路由配置  
    {  
      path: '/dashboard',  
      component: () => import('@/views/Dashboard.vue')  
    }  
    

4. 运行时优化
  1. 防抖/节流
    <script setup>javascript">  
    import { debounce } from 'lodash-es'  
    const search = debounce(() => {  
      // 搜索逻辑  
    }, 300)  
    </script>  
    
  2. 计算属性缓存
    javascript">const filteredList = computed(() =>  
      bigData.value.filter(item => item.active)  
    )  
    
  3. v-once/v-memo
    <template>  
      <!-- 静态内容 -->  
      <footer v-once>© 2024 公司名称</footer>  
    
      <!-- 按条件缓存 -->  
      <div v-memo="[user.id]">{{ user.name }}</div>  
    </template>  
    

5. 第三方库优化
  1. CDN引入
    <!-- index.html -->  
    <script src="https://unpkg.com/lodash@4.17.21/lodash.min.js"></script>  
    
    javascript">// vite.config.js  
    externals: {  
      'lodash': '_'  
    }  
    
  2. 按需加载图标库
    javascript">// 使用 unplugin-icons 自动按需加载  
    import IconAccessibility from '~icons/carbon/accessibility'  
    

6. 内存管理
  1. 定时器清理
    javascript">onUnmounted(() => {  
      clearInterval(timer)  
      window.removeEventListener('resize', handler)  
    })  
    
  2. 大对象释放
    javascript">const heavyData = ref(null)  
    onBeforeUnmount(() => {  
      heavyData.value = null // 主动释放内存  
    })  
    

优化前后对比示例

场景优化前优化后
首页加载体积2.5MB850KB(Gzip后)
列表渲染1000条数据1200ms200ms(虚拟滚动)
频繁搜索请求10请求/秒2请求/秒(防抖)

性能优化原则

  1. 测量优先:优化前先用工具定位瓶颈
  2. 渐进增强:优先解决主要性能问题
  3. 用户体验优先:关注FCP(首次内容渲染)、TTI(可交互时间)

http://www.niftyadmin.cn/n/5864846.html

相关文章

Python模块和包简单讲解

目录 模块&#xff08;Module&#xff09; 包&#xff08;Package&#xff09; 包和模块的区别 使用场景 模块&#xff08;Module&#xff09; 模块是一个包含Python代码的文件&#xff0c;通常以.py为扩展名。它用于组织相关的函数、类和变量等代码&#xff0c;方便复用和…

Milvus向量数据库可视化客户端Attu

概述 关于Milvus的介绍&#xff0c;可搜索网络资料。Milvus的使用还在摸索中&#xff1b;打算写一篇&#xff0c;时间待定。 关于Attu的资料&#xff1a; 官网GitHub文档 对于Milvus的数据可视化&#xff0c;有如下两个备选项&#xff1a; Milvus_cli&#xff1a;命令行工…

STM32-智能台灯项目

一、项目需求 1. 红外传感器检测是否有人&#xff0c;有人的话实时检测距离&#xff0c;过近则报警&#xff1b;同时计时&#xff0c;超过固定时间则报警&#xff1b; 2. 按键 1 切换工作模式&#xff1a;智能模式、按键模式、远程模式&#xff1b; 3. 智能模式下&#xff0c;根…

Deepin(Linux)安装MySQL指南

1.下载 地址&#xff1a;https://downloads.mysql.com/archives/community/ 2.将文件解压到 /usr/local 目录下 先cd到安装文件所在目录再解压&#xff0c;本机是cd /home/lu01/Downloads sudo tar -xvJf mysql-9.2.0-linux-glibc2.28-x86_64.tar.xz -C /usr/local3.创建软链…

时间转换(acwing)c/c++/java/python

读取一个整数值&#xff0c;它是工厂中某个事件的持续时间&#xff08;以秒为单位&#xff09;&#xff0c;请你将其转换为小时&#xff1a;分钟&#xff1a;秒来表示。 输入格式 输入一个整数 NN。 输出格式 输出转换后的时间表示&#xff0c;格式为 hours:minutes:second…

PyTorch下三角矩阵生成函数torch.tril的深度解析

PyTorch下三角矩阵生成函数torch.tril的深度解析 一、下三角矩阵的数学意义与应用场景 下三角矩阵&#xff08;Lower Triangular Matrix&#xff09;是线性代数中的基础概念&#xff0c;指主对角线以上元素全为0的方阵。这种特殊矩阵结构在数值计算中具有重要价值&#xff1a…

11. 断藕重连术 - 反转链表(迭代与递归)

哪吒在数据修仙界中继续他的修炼之旅。这一次&#xff0c;他来到了一片神秘的藕断湖&#xff0c;湖面上漂浮着一串串断裂的莲藕&#xff0c;每段莲藕上都刻着数字。湖中央有一座巨大的石碑&#xff0c;上面刻着一行文字&#xff1a;“欲破此湖&#xff0c;需以断藕重连术&#…

三:记录日志-设置成守护进程-改为生产环境

接着二&#xff1a;可以完美实现前端与后端的有机结合后 三需要 实现程序上线后&#xff0c;需要记录日志&#xff0c;将程序设置成系统守护进程&#xff0c;方便管理将环境设置为生产环境&#xff0c;在这一步前还是使用的app.run(),不符合生产需要 记录日志 需求&#xff…