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

devtools/2025/2/4 15:03:40/

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

1. package.json

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

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

2. 分包-webpack.docschina.org/plugins/split-chunks-plugin/" rel="nofollow">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,防止生成重复chunksreuseExistingChunk: true,},default: {minChunks: 2,priority: -20,reuseExistingChunk: true,},},},},
};

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

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

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

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


http://www.ppmy.cn/devtools/156034.html

相关文章

XCCL、NCCL、HCCL通信库

XCCL提供的基本能力 XCCL提供的基本能力 不同的XCCL 针对不同的网络拓扑,实现的是不同的优化算法的(不同CCL库最大的区别就是这) 不同CCL库还会根据自己的硬件、系统,在底层上面对一些相对应的改动; 但是对上的API接口…

基于springboot+vue的哈利波特书影音互动科普网站

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

代码随想录-训练营-day18

669. 修剪二叉搜索树 - 力扣(LeetCode) 这个题可以说是为二叉搜索树量身定做的题目,因为二叉搜索树的性质我们可以简单的从左右分辨出值的大小差异,方便我们进行递归或者迭代。比起具体的代码,这个题主要的难点在于如…

实现数组的扁平化

文章目录 1 实现数组的扁平化1.1 递归1.2 reduce1.3 扩展运算符1.4 split和toString1.5 flat1.6 正则表达式和JSON 1 实现数组的扁平化 1.1 递归 通过循环递归的方式,遍历数组的每一项,如果该项还是一个数组,那么就继续递归遍历&#xff0c…

自定义数据集 ,使用朴素贝叶斯对其进行分类

数据集定义: - data 列表包含了文本样本及其对应的情感标签。每个元素是一个元组,第一个元素是文本,第二个元素是标签。 特征提取: - 使用 CountVectorizer 将文本转换为词频向量。 fit_transform 方法在训练数据上拟合向量器…

如何在 Typecho 中实现 Joe 编辑器标签自动填充

如何在 Typecho 中实现 Joe 编辑器标签自动填充 在 Typecho 的文章编辑过程中,如果你使用 Joe 编辑器,可能会希望输入#标签后能自动提取并填充到文章的标签输入框中,以提高工作效率。接下来,我们将详细介绍如何通过开发一个 Type…

选择排序_75. 颜色分类

75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 题目不追求稳定 可以选择选择排序 这是我没看教程代码之前写的 有点复杂了 我还把元素后移了 class Solution { public:void sortColors(vector<int>& nums) {int min_num_index -1;int min_num 3;for(int i…

MySQL常用数据类型和表的操作

文章目录 (一)常用数据类型1.数值类2.字符串类型3.二进制类型4.日期类型 (二)表的操作1查看指定库中所有表2.创建表3.查看表结构和查看表的创建语句4.修改表5.删除表 (三)总代码 (一)常用数据类型 1.数值类 BIT([M]) 大小:bit M表示每个数的位数&#xff0c;取值范围为1~64,若…