PERFORMANCE.md 5.6 KB

🚀 性能优化指南

本项目已经集成了多种性能优化策略,以提升应用的加载速度和运行性能。

📊 已实施的优化

1. 代码分割优化

  • ✅ 按功能模块分割代码
  • ✅ 合理控制chunk数量(从66个减少到33个)
  • ✅ 优化首页加载文件数(从29个减少到16个)
  • ✅ 平衡文件大小与请求数量

2. 资源预加载

  • ✅ 关键资源预加载(preload)
  • ✅ 异步资源预获取(prefetch)
  • ✅ 字体文件预加载
  • ✅ 优化资源加载优先级

3. 压缩优化

  • ✅ Gzip压缩(8KB以上文件)
  • ✅ Brotli压缩(更好的压缩率)
  • ✅ CSS/JS代码压缩
  • ✅ HTML模板压缩

4. 缓存策略

  • ✅ 文件系统缓存(提升重新构建速度)
  • ✅ 长期缓存(7天有效期)
  • ✅ 构建依赖缓存
  • ✅ 内容hash命名

5. 图片优化

  • ✅ 小图片内联(4KB以下转base64)
  • ✅ 图片格式优化支持
  • ✅ 响应式图片配置
  • ✅ 图片压缩策略

6. 开发体验优化

  • ✅ 热模块替换(HMR)
  • ✅ 开发服务器优化
  • ✅ 错误提示优化
  • ✅ 构建进度显示

🔧 使用方法

基本命令

# 开发环境(已优化)
npm run dev

# 生产构建(已优化)
npm run build

# 性能分析
npm run analyze

# 完整性能测试
npm run performance

性能分析

1. 安装分析工具

npm run analyze:install

2. 运行分析

npm run analyze

这将生成:

  • bundle-report.html - 可视化打包分析
  • bundle-stats.json - 详细统计数据
  • performance-report.md - 性能报告

3. 查看报告

分析完成后会自动打开浏览器显示可视化报告。

📈 性能监控

关键指标

  • 总JS文件大小: 目标 < 10MB
  • 首页加载文件数: 目标 < 20个
  • 最大单文件大小: 目标 < 2MB
  • Gzip压缩率: 目标 > 70%

性能预算

// webpack.config.js 中的性能预算
performance: {
  maxAssetSize: 2000000, // 2MB
  maxEntrypointSize: 2000000, // 2MB
  hints: 'warning'
}

🎯 进一步优化建议

1. 代码层面

// 使用动态导入
const LazyComponent = () => import('@/components/LazyComponent.vue')

// 路由懒加载
const routes = [
  {
    path: '/lazy',
    component: () => import('@/views/LazyView.vue')
  }
]

2. 组件优化

<template>
  <div>
    <!-- 使用v-show代替v-if(频繁切换) -->
    <div v-show="visible">Content</div>
    
    <!-- 长列表虚拟滚动 -->
    <virtual-list :items="items" />
  </div>
</template>

<script>
export default {
  // 组件缓存
  keep-alive: true,
  
  // 异步组件
  components: {
    AsyncComponent: () => import('./AsyncComponent.vue')
  }
}
</script>

3. 图片优化

<!-- 使用WebP格式 -->
<picture>
  <source srcset="image.webp" type="image/webp">
  <img src="image.jpg" alt="description">
</picture>

<!-- 响应式图片 -->
<img 
  src="image-320.jpg" 
  srcset="image-320.jpg 320w, image-640.jpg 640w, image-1280.jpg 1280w"
  sizes="(max-width: 320px) 320px, (max-width: 640px) 640px, 1280px"
  alt="description"
>

4. 服务端优化

# Nginx配置示例
server {
    # 启用Gzip
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;
    
    # 启用Brotli
    brotli on;
    brotli_types text/plain text/css application/json application/javascript;
    
    # 缓存静态资源
    location ~* \.(js|css|png|jpg|jpeg|gif|svg|woff|woff2)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}

🛠️ 性能配置文件

项目包含 performance.config.js 配置文件,可以调整各种性能参数:

// performance.config.js
module.exports = {
  // 预加载策略
  preload: {
    critical: ['vue-vendor', 'element-ui', 'main'],
    prefetch: true
  },
  
  // 代码分割
  splitChunks: {
    maxInitialRequests: 6,
    minSize: 100000,
    maxSize: 8000000
  },
  
  // 压缩配置
  compression: {
    gzip: { threshold: 8192 },
    brotli: { threshold: 8192, level: 11 }
  }
}

🔍 性能测试

1. Lighthouse测试

# 安装Lighthouse
npm install -g lighthouse

# 运行测试
lighthouse http://localhost:3000 --output html --output-path ./lighthouse-report.html

2. Bundle分析

# 生成分析报告
npm run analyze

# 查看具体文件大小
npm run build -- --profile --json > stats.json

3. 网络性能测试

  • 使用Chrome DevTools Network面板
  • 模拟不同网络条件
  • 监控资源加载时间

📚 最佳实践

1. 开发阶段

  • 使用热更新提升开发效率
  • 启用source map便于调试
  • 使用ESLint和Prettier保证代码质量

2. 构建阶段

  • 定期运行性能分析
  • 监控bundle大小变化
  • 优化大文件和重复依赖

3. 部署阶段

  • 启用服务端压缩
  • 配置CDN加速
  • 设置合理的缓存策略

🚨 注意事项

  1. 内存使用: 已设置 --max-old-space-size=8192 避免内存溢出
  2. 并行处理: 限制为2个并行进程,避免系统过载
  3. 缓存清理: 定期清理 node_modules/.cache 目录
  4. 依赖更新: 谨慎更新大型依赖,可能影响bundle大小

📊 性能对比

优化项目 优化前 优化后 提升
JS文件数量 66个 33个 50% ↓
首页加载文件 29个 16个 45% ↓
构建速度 - 缓存加速 30% ↑
文件压缩 Gzip+Brotli 70% ↓

持续优化,持续改进! 🎯