◆ インストールは速くても zip を毎回展開するのでロードは遅そう
◆ 試してみたらやっぱり遅い
  ◆ node コマンドも yarn 経由になるので全体としてはけっこう差がある
◆ ネットワーク越しのストレージだと zip でまとめてダウンロードできるので逆に速くなった

Yarn4 が出ましたし そろそろ PnP をメインに使い始めたほうがいいのかなと考えてます (Yarn3 の頃にも言ってたような?)
でも node_modules がなくなるので 直接パッケージのソースコードを確認できなくなるのが不便なんですよね
普段からけっこう node_modules の中を見てるので

それと PnP は インストールは速くなっても require や import は遅くなると思います
PnP を使うとモジュールをロードするときに都度 zip から展開することになります
node_modules では不要な処理なので PnP のほうが遅くなるはずです

開発中は再起動を繰り返すことがあるので起動が遅くなるのは不満があります
今でも起動が遅いなと思うことがあるくらいですし 読み込み速度は結構重要です
どれくらい差があるのか調べてみました

ロード時間の比較

重そうなパッケージがパッと思い浮かばなかったので サーバーサイドのフレームワークのパッケージをいくつか入れてすべてロードすることにしました
express と koa と hapi と fastify です
合わせて node_modules フォルダのサイズ的はおよそ 15MB でした

計測する内容はこれです

console.time()
require("express")
require("koa")
require("hapi")
require("fastify")
console.timeEnd()

結果ですが PnP を使ったものはこうなりました

default: 498.091ms
default: 486.451ms
default: 487.522ms
default: 500.911ms
default: 489.471ms
default: 493.81ms
default: 489.068ms
default: 486.64ms
default: 491.693ms
default: 499.129ms

0.5 秒ほどです

node_modules だとこうなりました

default: 301.83ms
default: 274.523ms
default: 282.952ms
default: 278.844ms
default: 277.118ms
default: 279.432ms
default: 286.744ms
default: 276.592ms
default: 282.868ms
default: 278.434ms

0.3 秒ほどです
2 倍とまで行きませんが結構差があります

実際のコマンドの時間

ただ 体感だともっと差がありました
考えてみると PnP だと独自のローダーを使うので node コマンドを直接使えません
yarn node というふうに yarn を通します
これのせいで node コマンドの起動自体にかかる時間が増えてるように思います

time コマンドを通してコマンド全体の実行速度を計測してみました

PnP:
real 0m1.084s
user 0m1.349s
sys 0m0.106s

node_modules:
real 0m0.343s
user 0m0.391s
sys 0m0.029s

倍以上に時間差があります
やっぱり PnP は遅いです

速い場合

ふと思ったのですが zip 単位での読み取りなので WSL から Windows のファイルシステムにアクセスしたり cifs マウントしてるストレージを使ったりしてる場合は速くなりそうです
個別に小さいファイルを大量に読み取るのは時間がかかりますが zip にまとまっていればパッケージごとに 1 ファイルで済ませられます

試してみました
WSL から Windows のファイルシステムにおいたプロジェクトを読み取ります

まずは PnP です

root@cb87b95ff33a:/mnt/3# time yarn node index.js
default: 2.169s

real 0m2.872s
user 0m1.740s
sys 0m0.173s

root@cb87b95ff33a:/mnt/3# time yarn node index.js
default: 2.161s

real 0m2.935s
user 0m1.714s
sys 0m0.284s

root@cb87b95ff33a:/mnt/3# time yarn node index.js
default: 2.214s

real 0m2.923s
user 0m1.673s
sys 0m0.279s

3 秒弱でさっきよりもかなり遅くなっています

次に node_modules です

root@cb87b95ff33a:/mnt/3# time node index.js
default: 6.839s

real 0m6.911s
user 0m1.025s
sys 0m1.003s

root@cb87b95ff33a:/mnt/3# time node index.js
default: 6.774s

real 0m6.854s
user 0m1.093s
sys 0m0.856s

root@cb87b95ff33a:/mnt/3# time node index.js
default: 6.825s

real 0m6.897s
user 0m1.227s
sys 0m0.781s

7 秒弱です
さらに遅いです

こういうときは PnP にしたほうが良さそうですね
私の場合 Linux で Node.js を動かすときって基本 Windows のファイルシステムを共有して外部の Linux 環境や WSL からファイルを読み込んでるので PnP を積極的に使っていい気がしました

node_modules がないので実際のコードがすぐ見れないのだけが気がかりですけど
yarn を通しても 「yarn node --inspect」 でデバッガーを接続して実行中のコードは見れますが これだけじゃなくて node_modules を直接見たいことが結構あるのですよね