分析在执⾏构建的前⼀个环节——依赖安装阶段中,⼜有哪些因素会对执⾏效率产⽣影响。
五种前端依赖的安装⽅式
- npm:npm 是 NodeJS ⾃带的包管理⼯具,也是使⽤最⼴泛的⼯具之⼀。
- Yarn:Yarn 是 Facebook 于 2016 年发布的包管理⼯具,和 npm 5 之前的版本相⽐,Yarn 在依赖版本稳定性和安装效率⽅⾯通常更优。
- Yarn with PnP:Yarn ⾃ 1.12 版本开始⽀持 PnP 功能,旨在抛弃作为包管理⽬录的 node_modules,⽽使⽤软链接到本地缓存⽬录的⽅式来提升安装和模块解析的效率。
- Yarn v2:Yarn 在 2020 年初发布了 v2 版本,它和 v1 版本相⽐有许多重⼤改变,包括默认使⽤优化后的 PnP 等。v2 版本⽬前通过 Set Version 的⽅式安装在项⽬内部,⽽⾮全局安装。
- pnpm:pnpm 是于 2017 年发布的包管理⼯具,和 Yarn 相同,它也⽀持依赖版本的确定性安装特性,同时使⽤硬连接与符号连接缓存⽬录的⽅式,这种⽅式相⽐于⾮ PnP 模式下的 Yarn 安装⽽⾔磁盘存储效率更⾼。
依赖安装的基本流程
- 解析依赖关系阶段:这个阶段的主要功能是分析项⽬中各依赖包的依赖关系和版本信息。
- 下载阶段:这个阶段的主要功能是下载依赖包。
- 链接阶段:这个阶段的主要功能是处理项⽬依赖⽬录和缓存之间的硬链接和符号连接。
对不同安装⼯具和不同安装条件的效率总结
-
不同安装条件
- 对于项⽬的依赖安装过程来说,效率最⾼的 3 个条件是:存在 Lock ⽂件存在,存在本地缓存存在和存在安装记录。
- 这 3 个条件中,Lock ⽂件的留存是最容易做到的,也是最可能被忽略的。⼤部分项⽬也都会保留在代码仓库中。
- 本地缓存则是当安装记录不存在时最重要的优化⼿段。对于⼤部分部署系统⽽⾔,本地缓存通常也是会默认保留在部署服务器上的。因此需要注意的更多是磁盘空间与效率的平衡。此外需要注意在部署服务的个别项⽬中,执⾏清除缓存的操作也会影响其他项⽬。
- 本地安装记录对于部署系统⽽⾔需要占据较多的磁盘空间,因此在多数情况下,部署系统默认不保留安装⽬录。项⽬中如需考虑这⼀优化点,建议确认所使⽤的部署系统是否⽀持相关设定。
- 在安装条件⽅⾯,其实还有⼀些额外的不容易量化的条件,例如⽹速、磁盘 I/O 速度等,对于部署服务⽽⾔,这些硬件条件的好坏也会直接影响⽤户的使⽤效率。
-
不同安装⼯具
- 如果考虑各种场景下的综合表现,pnpm 是最稳定⾼效的,其他⼯具在不同场景下多少都有表现不佳的情况。
- 如果考虑现实情况中,在部署环境下⼤多可以⽀持 Lock ⽂件和本地缓存的留存,并且部分系统中也会保留安装⽬录,则 Yarn v1 是更好的选择。
- 如果考虑只有 Lock ⽂件的情况,则 npm 的表现要优于 Yarn。
- 在⽆安装⽬录的情况下,Yarn v1 的 PnP 模式效率要⾼于普通模式。
- 尽管 Yarn v2 在⽆缓存的情况都表现不佳,但是它有⼀点优势是其他⽅式⽆法替代的,即⽀持针对单个项⽬清除缓存⽽不影响全局。
网友评论