title

项目优化

webpack v4

打包优化

  • 准备工作

    • 开启可视化分析方案插件

      • ‘speed-measure-webpack-plugin’

        • 显示打包速度等信息
      • ‘webpack-bundle-analyzer’

        • 显示打包后的整体报告

        • 具体配置

          // moment.js转换day.js new AntdDayjsWebpackPlugin({ preset: 'antdv3', }), //包计时插件 new SpeedMeasurePlugin(), //包分析插件 process.env.ANALYZER && new BundleAnalyzerPlugin(), //增加新的启动命令 "analyzer": "ANALYZER=true node scripts/build.js",
  • loader优化:

    • 概念:将这些webpack无法识别的模块进行编译、压缩、打包,最终转换为js的加载器
    • 优化: 优化loader搜索范围,忽略不需要编译的目录,
  • css压缩:

    • optimization配置

      • 只需在build脚本中使用’optimize-css-assets-webpack-plugin’插件
  • js代码分包与压缩:

    • 缓存组

      • 基础库缓存

        • js框架的安装包
      • UI库缓存

        • UI框架以及其他样式相关库的安装包
      • 通用代码缓存

        • 工具包等全局型代码
    • 具体实现:

      splitChunks: { chunks: 'all', // initial(初始化) | async(动态加载) | all(全部) minSize: 30000, // // 大于30k会被webpack进行拆包,默认0 minChunks: 1, // 被引用次数大于等于这个次数进行拆分,默认1 maxAsyncRequests: 5, // 最大异步请求数, 默认1 maxInitialRequests: 5, // 最大初始化请求数,默认1 name: true, automaticNameDelimiter: '.', // 打包分隔符 cacheGroups: { // 基础库 baseChunks: { name: 'base.chunks', // 要分隔出来的 chunk 名称 test: (module) => /react|react-dom|react-router-dom|react-redux|redux|axios|moment|lodash/.test( module.context ), priority: 20, // 打包优先级 }, uiChunks: { name: 'ui.chunks', test: (module) => /antd|@ant-design\/icons|echarts|emoji-mart/.test(module.context), priority: 10, // 打包优先级 }, default: { name: 'common.chunks', // 要分隔出来的 chunk 名称 minChunks: 2, // 引入两次及以上被打包 priority: 5, reuseExistingChunk: true, // 可设置是否重用已用chunk 不再创建新的chunk }, }, },
  • 实现效果:

    • 拆包与缓存之后对比:

    • 打包加载时间对比

    • 打包体积对比

首屏优化

  • 图片处理

    • 由png更改为webP ⇒ 减少LCP
    • 增加img的宽高
  • 性能对比

lighthouse

https://googlechrome.github.io/lighthouse/scorecalc/#FCP=0&SI=0&FMP=0&TTI=0&FCI=0&LCP=0&TBT=0&CLS=0&device=desktop&version=6