当前位置: 首页 > article >正文

性能优化2-删除无效引用

依赖错综复杂,如何判断是有效依赖

1. package.json

  • webpack升到3以后,未使用的dependence不会被打包;
  • devDependence和dependence基本没啥区别;即生产依赖放入dev中,也能正常打包;但我们仍需遵守依赖的放置规则,方便后续维护;

综上所述,package.json无法判断有效依赖。

2. 分包-SplitChunksPlugin

网页的分包可能理解有点困难,因为配置项比较多,但对比小程序的分包-subpackages(按目录来分),其实差不太多。
下面是splitChunksPlugin的默认配置

module.exports = {
  //...
  optimization: {
    splitChunks: {
      // 有3个参数,all,async,initial;多试试就知道咋回事了
      chunks: 'async',
      // 最小可分包的大小-bytes, 下面是20KB;小于当前值会被合并打包
      minSize: 20000,
      // 没用过
      minRemainingSize: 0,
      // 不懂:拆分前必须共享模块的最小 chunks 数
      minChunks: 1,
      // 下面两个请求:指的是当前文件中,通过import导入的各种文件数量(至于是否递归子项的import,尚需进一步确认);并不是通常意义上的网络请求
      maxAsyncRequests: 30,
      maxInitialRequests: 30,
      // 分包的后的文件名,以及该文件中包含的依赖项
      cacheGroups: {
      	// 如下三种文件名都可以:defaultVendors,defaultvendors,'default-vendors'
        defaultVendors: {
          // 规则匹配依赖项名称,如仅需将vue和pinia打包在一起,则可以写成"test: /[\\/]node_modules[\\/]/[vue|pinia]"
          test: /[\\/]node_modules[\\/]/,
          // 权重,打包时会涉及到同一个文件夹,值越高,那么将会优先打包。
          priority: -10,
          // 重(chong)用,一般写true,防止生成重复chunks
          reuseExistingChunk: true,
        },
        default: {
          minChunks: 2,
          priority: -20,
          reuseExistingChunk: true,
        },
      },
    },
  },
};

说了这么一大堆,怎么删除无效引用呢?

  • 上面不是设定了20Kb的文件上限吗?那最终到页面上的时候,通过网络面板,能看到加载的资源。
  • 分析页面上加载的资源,是否是当前页面必须用到的。那如何分析呢?
  • 获取资源中的关键字符和方法,去自己对应的页面中查询;如果没有,就去查node_modules依赖。
  • 如果发现依赖已经没有使用,即可删除。
  • 是不是觉得小题大做?明明可以直接找到文件,进行删除。可刚接手一个旧项目,领导让你做优化,项目中还有超大文件和各种复杂依赖,这个时候能直接删吗?肯定不能。

性能优化是一个螺旋向上的过程,基本无法一步到位。曾经遇到过一个情况,首屏加载了iconfont的字体库,问遍组内所有同学,说小图标已经全部切换成svg。删完之后发现首屏加载速度快了10%,且页面各图标显示正常;结果上线后,发现有两个深层次路径上的组件,图标缺失,于是紧急补了两个svg。

有的同学说,依赖都有用,一个都删不掉,这就涉及到下一篇文章说的异步加载。


http://www.kler.cn/a/526490.html

相关文章:

  • 6.进程的使用方式
  • Linux《基础指令》
  • 【解决方案】MuMu模拟器移植系统进度条卡住98%无法打开
  • 中国股市“慢牛”行情的实现路径与展望
  • 如何监控ubuntu系统某个程序的运行状态,如果程序出现异常,对其自动重启。
  • 【Go语言圣经】第五节:函数
  • kobject、kset和ktype的关系
  • 论文阅读(七):贝叶斯因果表型网络解释遗传变异和生物学知识
  • python | OpenCV小记(一):cv2.imread(f) 读取图像操作(待更新)
  • 春晚舞台上的智能革命:中美人形机器人技术对比与发展
  • 日志2025.1.30
  • 【深度分析】DeepSeek 遭暴力破解,攻击 IP 均来自美国,造成影响有多大?有哪些好的防御措施?
  • Spring AI 与企业级应用架构的结合
  • 举例说明python单利模式的必要性
  • 数论问题80
  • floodfill算法(6题)
  • Node.js——模块化(模块的基本概念、模块化的规范、包与NPM)
  • 傅里叶分析之掐死教程
  • Zookeeper入门部署(单点与集群)
  • 《Chart.js 饼图:深度解析与最佳实践指南》
  • 【新春特辑】2025年1月科技浪潮中的AI最新时事与科技趋势
  • autosar bsw 的关键模块
  • Nuitka打包python脚本
  • C++中常用的十大排序方法之1——冒泡排序
  • CF 761A.Dasha and Stairs(Java实现)
  • deb安装失败后,无法再安装别的包的解决方案