Edited at

結局Yarnは速いのか2018秋

Yarnはキャッシュするので速いという話をよく聞いていて、Yarnしか使ってなかったが、最近npmを使う機会があって気づいたのは、そこまで遅くないなということ。6.xになってから爆速になったという噂もそういえばあった。

*この記事は速さのみに絞っているので、npmはauditがあるだとか、yarnのupgrade-interactiveは至高だとか言う話は置いておきます。


計測環境


  • MacBook Pro (13-inch, 2018)

  • macOS High Sierra Version 10.13.6

  • Node.js v10.11.0

  • npm v6.4.1

  • Yarn v1.10.1


package.json

{

"private": true,
"dependencies": {
"@types/bcrypt": "^3.0.0",
"@types/joi": "^13.6.0",
"@types/koa": "^2.0.46",
"@types/koa-bodyparser": "^5.0.1",
"@types/koa-router": "^7.0.32",
"@types/react": "^16.4.15",
"@types/react-dom": "^16.0.8",
"bcrypt": "^3.0.1",
"concurrently": "^4.0.1",
"del-cli": "^1.1.0",
"joi": "^13.7.0",
"koa": "^2.5.3",
"koa-bodyparser": "^4.2.1",
"koa-router": "^7.4.0",
"onchange": "^5.0.2",
"parcel-bundler": "^1.10.1",
"pg": "^7.5.0",
"prettier": "^1.14.3",
"react": "^16.5.2",
"react-dom": "^16.5.2",
"reflect-metadata": "^0.1.12",
"ts-node": "^7.0.1",
"tslint": "^5.11.0",
"typeorm": "^0.2.7",
"typescript": "^3.1.1"
}
}


  • 計測は/usr/bin/timeを使用


lockファイルなしの場合

npm: 15.93 real 23.63 user 14.89 sys

Yarn: 15.55 real 8.09 user 12.14 sys


lockファイルありの場合

npm: 11.88 real 19.40 user 13.19 sys

npm ci: 8.00 real 2.47 user 0.40 sys

Yarn: 8.46 real 5.81 user 11.53 sys


考察


  • 新規インストールは大して変わらないが、lockファイルが存在するときの高速化はYarnが勝る。

  • そもそもnpmはlockファイルがあろうがなかろうが依存関係を解決するらしいので、Yarnが速いのは当たり前か。

  • ただし依存関係を解決しないciコマンドだと、Yarnと同じくらいでしかもユーザーCPU時間が半分以下。

  • 既存プロジェクトを引っ張ってきて最初のインストールはnpm ci、その後はnpm iを使ったら、Yarnとほぼ同じの速さ。


結論

Yarnは速くない。他の機能でどっちを使うか決めよう。


注意

ベンチマーク素人です。アドバイス頂けたらありがたいです。