Vue性能优化全方案
(1)编码阶段优化
1. 精简响应式数据
- 描述: 减少data中的非必要数据,每个属性都会生成getter/setter
- 影响: 减少Observer观察者实例,降低内存消耗
- 实现: 只将需要响应式的数据放在data中
2. v-if与v-for分离
- 描述: 避免在同一元素上同时使用v-if和v-for
- 影响: 提高渲染效率,避免不必要的计算
- 实现: 使用计算属性过滤列表后再渲染
3. 事件代理
- 描述: 对v-for渲染的列表项使用事件代理
- 影响: 减少内存占用,提高事件处理效率
- 实现: 在父元素上统一处理事件,通过dataset识别目标
4. 组件缓存
- 描述: 使用keep-alive缓存SPA页面组件
- 影响: 避免重复渲染,保留组件状态
- 实现:
vue
<keep-alive>
<router-view />
</keep-alive>
5. 合理使用v-if/v-show
- 描述: 频繁切换用v-show,运行时条件用v-if
- 影响: v-show初始渲染成本高但切换快,v-if初始成本低但切换慢
6. 唯一key值
- 描述: 为v-for项设置唯一稳定的key
- 影响: 提高虚拟DOM diff效率
- 实现: 使用id等业务标识而非数组索引
7. 懒加载
- 描述: 路由懒加载+组件异步加载
- 影响: 减少初始包体积
- 实现:
javascript
JavaScript
1const Foo = () => import('./Foo.vue')
8. 防抖节流
- 描述: 对高频事件(如resize, scroll)进行控制
- 工具: lodash的debounce/throttle
9. 动态加载
- 描述: 长列表滚动加载+图片懒加载
- 工具: vue-lazyload, Intersection Observer API
(2)SEO优化
1. 预渲染
- 描述: 构建时生成静态HTML
- 工具: prerender-spa-plugin
- 适用: 静态内容较多的页面
2. 服务端渲染(SSR)
- 描述: 服务端生成完整HTML
- 框架: Nuxt.js
- 优势: 更好的SEO和首屏性能
(3)打包优化
1. 代码压缩
- 工具: TerserWebpackPlugin
- 配置:
yaml
JavaScript
1optimization: {
2 minimize: true
3}
2. Tree Shaking
- 描述: 消除未引用代码
- 条件: 使用ES6模块语法
- 工具: Webpack4+默认启用
3. CDN加速
- 描述: 将第三方库通过CDN引入
- 实现:
css
JavaScript
1externals: {
2 vue: 'Vue',
3 'vue-router': 'VueRouter'
4}
4. 分包策略
- 描述: 使用splitChunks分离公共依赖
- 配置示例:
css
JavaScript
1splitChunks: {
2 chunks: 'all'
3}
5. SourceMap优化
- 建议: 生产环境使用'cheap-module-source-map'
(4)用户体验优化
1. 骨架屏
- 描述: 在内容加载前显示页面框架
- 工具: vue-skeleton-webpack-plugin
2. PWA支持
- 描述: 实现离线可用和安装体验
- 工具: @vue/cli-plugin-pwa
3. 缓存策略
-
方法:
- 客户端: localStorage/sessionStorage
- 服务端: ETag/Last-Modified
- 开启gzip压缩
优化优先级建议
- 首屏加载优化 → 路由懒加载/CDN/SSR
- 运行时性能 → v-if/v-show/事件代理
- 打包体积 → Tree Shaking/代码分割
- 用户体验 → 骨架屏/PWA