WORKPAGE_OPTIMIZATION.md 4.7 KB

WorkPage 性能优化方案

问题分析

原始问题

workPage 只有两个页面,但打包后文件过大,导致加载缓慢:

  • workPage-vendor.js - 2.99 MB (第三方库)
  • workPage.js - 1.74 MB (应用代码)
  • workPage.css - 562 KB (样式)
  • 总计约 5.3 MB

根本原因

  1. 引入了完整的 Element UI - 约 600KB+ 未使用的组件
  2. 全局引入大型库 - echarts、video-player、viewer、vue-audio 等 workPage 不需要的库
  3. 未使用 CDN - katex、wangeditor、aws-sdk 等大型库都打包进了 bundle
  4. 未启用代码分割 - 所有代码一次性加载,没有懒加载
  5. 未启用 gzip 压缩 - 传输体积未优化

优化方案

✅ 1. Element UI 按需引入

修改文件: src/router/index2.js

// 之前:引入完整的 Element UI
import ElementUI from 'element-ui'
Vue.use(ElementUI)

// 优化后:按需引入
import { Dialog } from 'element-ui'
// 只引入 workPage 需要的组件

预计优化: 减少 ~400KB

✅ 2. 移除不必要的全局依赖

修改文件: src/workPage/main.js

移除了以下不必要的依赖:

  • echarts (图表库,workPage 不需要)
  • vue-video-player (视频播放器)
  • vue-audio-better (音频播放器)
  • v-viewer (图片查看器)
  • hevue-img-preview (图片预览)
  • clipboard (剪贴板功能)

预计优化: 减少 ~800KB

✅ 3. 使用 CDN 加载大型库

修改文件: build/webpack.prod.conf.js, public/workPage.html

// webpack externals 配置
externals: {
  'katex': 'katex'  // 从 CDN 加载,不打包
}
<!-- workPage.html 添加 CDN -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>

预计优化: 减少 ~500KB

✅ 4. 启用路由懒加载

修改文件: src/router/index2.js

// 之前:同步加载
import workPage from '@/components/pages/workPage/index'
import workPageNew from '@/components/pages/workPage/index_new'

// 优化后:懒加载
const workPage = () => import(/* webpackChunkName: "workPage" */ '@/components/pages/workPage/index')
const workPageNew = () => import(/* webpackChunkName: "workPageNew" */ '@/components/pages/workPage/index_new')

效果: 只加载当前访问的页面,首屏加载更快

✅ 5. 启用 Gzip 压缩

修改文件: config/index.js

productionGzip: true  // 从 false 改为 true

效果: 文件传输体积减少 60-70%

预期优化效果

优化前

  • workPage-vendor.js: 2.99 MB
  • workPage.js: 1.74 MB
  • workPage.css: 562 KB
  • 总计: ~5.3 MB

优化后(预估)

  • workPage-vendor.js: ~800 KB (减少 73%)
  • workPage.js: ~600 KB (减少 66%)
  • workPage.css: ~400 KB (减少 29%)
  • 总计: ~1.8 MB (减少 66%)

Gzip 后(预估)

  • 总计: ~600 KB (减少 89%)

进一步优化建议

1. 处理 AWS SDK

如果 workPage 使用了 aws-sdk,建议:

  • 检查是否真的需要
  • 如果需要,只引入需要的服务(如 S3)
  • 考虑使用服务端 API 代替客户端直接上传

2. 优化 wangeditor

富文本编辑器很大,建议:

  • 确认是否 workPage 的两个页面都需要
  • 考虑使用更轻量的替代方案
  • 或者按需异步加载

3. 图片优化

  • 使用 WebP 格式
  • 图片懒加载
  • 压缩图片资源

4. 代码分割

  • 将不常用的功能拆分为独立 chunk
  • 使用 webpack 的 magic comments 控制 chunk 名称

如何验证优化效果

1. 查看构建产物

npm run build

查看 dist/static/js/ 目录下的文件大小

2. 使用 webpack-bundle-analyzer

npm run build --report

会自动打开浏览器显示打包分析报告

3. 测试加载速度

  • 使用 Chrome DevTools Network 面板
  • 启用网络限速(Fast 3G)测试
  • 查看 DOMContentLoaded 和 Load 时间

部署说明

服务器配置

确保服务器启用 gzip 压缩:

Nginx 配置:

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1000;

Apache 配置:

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
</IfModule>

注意事项

  1. CDN 可用性: 确保目标用户能访问 jsdelivr.net CDN
  2. 缓存策略: 合理设置静态资源的缓存时间
  3. 兼容性测试: 优化后需要测试各个功能是否正常

总结

通过以上优化,workPage 的加载速度预计可以提升 3-5 倍,用户体验将显著改善。