全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 10 道配套习题

性能优化与缓存策略专题

专题说明

本专题深入NPM性能优化领域,涵盖缓存机制的底层原理、安装速度的瓶颈分析与调优策略,以及如何分析依赖树并减少冗余依赖体积。

学习目标

  1. 理解NPM缓存存储结构与缓存键计算机制
  2. 掌握依赖安装性能分析与并行下载优化策略
  3. 学会分析依赖树、移除冗余依赖并选择轻量替代方案

学习内容

  • 缓存机制:存储结构、缓存键计算、命中率优化
  • 安装性能调优:速度瓶颈分析、并行下载策略
  • 减少依赖体积:依赖树分析、冗余移除、轻量替代

学习建议

  1. CI环境中配置npm缓存可大幅提升构建速度
  2. 定期使用depcheck等工具检查未使用的依赖
  3. 选择依赖时关注包体积,优先选择轻量方案

📝 配套习题(10 题)

💡 参考答案在文末
判断题
1

在npm包中,如果package.json中同时定义了"files"字段和.npmignore文件,则.npmignore的排除规则仍然会生效,即files列出的文件仍可能被.npmignore排除。

A

B

单选题
2

关于npm缓存机制,以下哪个描述是正确的?

A

npm缓存使用key-value存储结构,以包名+版本号作为key,tarball作为value

B

npm v5+的缓存采用content-addressable storage,通过内容的hash值索引缓存条目

C

npm缓存在每次npm install时都会完全失效并重新下载所有依赖

D

npm缓存仅存储tarball文件,不存储元数据(metadata)

3

在一个CI环境中,为了最大化npm install的性能,以下哪个配置组合是最佳实践?

A

--prefer-offline --no-audit --no-fund --progress=false

B

--prefer-online --no-audit --no-fund --loglevel=silent

C

--prefer-offline --no-audit --no-optional --ignore-scripts

D

--cache-min=999999 --no-audit --no-fund --prefer-offline

4

关于减少npm项目依赖体积,以下哪个说法是错误的?

A

使用npm dedupe可以将依赖树中的重复包提升到顶层node_modules,减少磁盘占用

B

在package.json的files字段中只列出必要的发布文件,可以减小发布包体积

C

npm prune --production会删除node_modules中所有devDependencies,但不会删除多余的重复依赖

D

使用bundleDependencies将关键依赖打包进项目,可以减少安装时的网络请求,但会增大发布包体积

多选题
5

关于npm缓存的完整性校验与维护机制,以下哪些说法是正确的?

A

npm cache verify会检查缓存中每个条目的integrity字段与实际内容的hash是否一致

B

npm缓存中的content-addressable条目以SHA-512 hash的完整hex编码作为文件名

C

当缓存条目校验失败时,npm会自动删除该条目并重新下载

D

npm cache clean --force会同时清除全局缓存和项目node_modules中的硬链接

E

缓存的integrity字段使用subresource integrity格式,包含hash算法和base64编码的hash值

F

npm的cache目录内部_cacache子目录包含content和index两个核心子目录

6

以下哪些方法可以显著提升npm install的执行速度?

A

使用npm set progress=false禁用进度条,减少TTY写入开销

B

配置maxsockets参数限制并发请求数,避免HTTP连接耗尽

C

使用npm install --prefer-offline优先从缓存读取

D

在package.json中将依赖从dependencies移到devDependencies,结合--production安装

E

使用npm shrinkwrap锁定依赖树,避免每次重新解析依赖关系

F

设置npm config set ignore-scripts true跳过所有生命周期脚本

7

以下哪些策略可以有效减少npm项目的依赖体积?

A

使用dependency-cruiser或madge分析依赖图,识别并移除未使用的依赖

B

将moment.js替换为dayjs或date-fns等更轻量的日期库

C

在webpack/vite等打包工具中配置resolve.alias,将lodash替换为lodash-es

D

使用npm pack --dry-run在发布前预览将要包含的文件列表

E

在package.json中设置"sideEffects":false以支持tree-shaking

F

使用npm install --no-optional跳过所有optionalDependencies

填空题
8

npm缓存的底层由____________库实现,其缓存目录内部包含________________________两个核心子目录,前者存储实际包内容,后者存储索引条目。当需要查看缓存目录路径时,可以使用npm config get cache命令。在.npmrc中,控制缓存目录路径的配置项为cache。

9

npm安装依赖时,控制最大并发网络请求数的配置项是____________,其默认值为____________。在CI环境中,为了加速安装,建议设置环境变量____________为true,该设置等价于npm install时添加--prefer-offline参数。另一个重要的CI环境变量NPM_CONFIG_FUND设置为false时,可跳过funding信息的输出。

10

在已安装完整依赖的项目中,若需要清理devDependencies以减少node_modules的体积,可以使用命令____________。该命令会对比package.json中的依赖声明,移除所有属于____________的已安装包,从而实现依赖体积的精简。

参考答案
1.错误 2.B 3.A 4.C 5.A;C;E;F 6.A;B;C;D;E 7.A;B;C;D;E 8.cacache;content;index 9.maxsockets;15;NPM_CONFIG_PREFER_OFFLINE 10.npm prune --production;devDependencies
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 常见问题与排查专题
下一个专题 → 模块解析机制专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码