原文地址:https://dnasir.com/2018/11/26/is-yarn-still-faster-than-npm-in-late-2018/
如果你像我一样,那么你可能听说过 Yarn
– Npm
的一款可替产品。你甚至可能已经听说过 Yarn 要比 Npm 快不少。
自从 Yarn
首次进入人们视野以来,似乎这一结论已经尘埃落定。但是 Npm
通过一些版本更新来不断回击这一理论。现在是时候让我们看一下这一结论是否有所改变。
设置
我为此实验创建一个小项目,package.json
文件如下所示:
{
"devDependencies": {
"@babel/core": "^7.1.2",
"@babel/plugin-proposal-class-properties": "^7.1.0",
"@babel/plugin-proposal-object-rest-spread": "^7.0.0",
"@babel/polyfill": "^7.0.0",
"@babel/preset-env": "^7.1.0",
"autoprefixer": "^9.3.1",
"babel-loader": "^8.0.4",
"css-loader": "^1.0.1",
"happypack": "^5.0.0",
"mini-css-extract-plugin": "^0.4.4",
"node-sass": "^4.9.4",
"postcss-loader": "^3.0.0",
"postcss-preset-env": "^6.3.0",
"sass-loader": "^7.1.0",
"style-loader": "^0.23.1",
"ts-loader": "^5.3.0",
"typescript": "^3.1.5",
"vue-loader": "^15.4.2",
"vue-template-compiler": "^2.5.17",
"webpack": "^4.23.1",
"webpack-bundle-analyzer": "^3.0.3",
"webpack-cli": "^3.1.2",
"webpack-merge": "^4.1.4"
},
"dependencies": {
"vue": "^2.5.17",
"vue-property-decorator": "^7.2.0"
}
}
我将使用 Powershell
的 Measure-Command
功能来测量执行给定命令所需的时间。
我使用如下命令来测量每个软件包管理器完成安装所花费的时间。这其中还包括了–production生产运行的标志。
Measure-Command { npm install }
Measure-Command { yarn install }
Tip. 本次测试使用的包管理器版本分别是:NPM 6.4.1
和Yarn 1.12.3
,这是写下这篇文章时,它们各自的最新版本。
我通过使用 npm cache clean -f
和yarn cache clean
命令清空了包管理器的缓存,而在需要缓存的情况下,则不执行此命令。
结果
情景 |
Npm |
Yarn |
清空 |
31.93s |
29.55s |
清空(生产环境) |
6.19s |
12.55s |
缓存 |
20.52s |
15.67s |
缓存(生产环境) |
5.29s |
1.56s |
对,你没看错。Yarn确确实实在 1.5s 内安装了这两个软件包。
接下来,我很想知道 .lock
文件在性能方面所起的作用,因此我进行了另一组测试,在这些测试中,我将使用相关配置(不使用.lock文件)来运行install命令。
Measure-Command { npm install --no-package-lock }
Measure-Command { yarn install --no-lockfile }
显然,在正常情况下你不会这样做,但是我很好奇 .lock文件 可以带来多少性能上的提升。
结果(.lock文件已禁用)
情景 |
Npm |
Yarn |
清空 |
42.12s |
46.94s |
清空(生产环境) |
15.40s |
25.53s |
缓存 |
28.09s |
25.10s |
缓存(生产环境) |
8.70s |
16.32s |
结果非常有趣,因为 Npm 在除一种情况之外的所有情况下都占据上风。显然,.lock文件在提高两个程序包管理器的性能方面都发挥了巨大作用。
在存在.lock文件的情况下,所有运行的速度始终一致,并且在缓存期间,Yarn花了Npm大约四分之一的时间来下载相同的软件包。
结论
在过去的几个版本中,Npm 设法弥补了性能上的差距,就目前而言,Npm 和 Yarn 在速度方面不相上下-与Yarn刚面世时形成了鲜明对比。
因此,如果你要追求速度,那么 Yarn 的性能将比 Npm 稍好一些,但是考虑到 Npm 在过去几个月中取得的进步,这种情况可能仍会改变。