VSCodeの起動が遅いと感じたとき、原因を特定するための2つのコマンドがある。
Developer: Startup Performance
Developer: Startup Performance はVSCodeの起動にかかった時間を詳細に表示するコマンド。
コマンドパレット(Ctrl + Shift + P / Cmd + Shift + P)で Startup Performance と入力して実行する。
実行するとシステム情報と各処理フェーズの所要時間が表示される。
System Info
VSCodeのバージョンやOS、CPU、メモリなどの環境情報が確認できる。
## System Info
* Code: 1.124.2
* OS: darwin(25.2.0)
* CPUs: Apple M1 Max(10 x 2400)
* Memory(System): 32.00 GB(0.62GB free)
* VM(likelihood): 0%
* Initial Startup: false
Initial Startup が false の場合は再起動、true の場合は初回起動を示す。初回起動はキャッシュが存在しないため、再起動より多くの時間を要する傾向がある。
Performance Marks
各処理フェーズの所要時間(ms)の一覧。
| What | Duration | Process |
|---|---|---|
| window.loadUrl() => begin to import(workbench.desktop.main.js) | 113 | [main->renderer] |
| import(workbench.desktop.main.js) | 178 | [renderer] |
| init storage (global & workspace) | 23 | [renderer] |
| init workspace service | 43 | [renderer] |
| register extensions & spawn extension host | 316 | [renderer] |
| restore & resolve visible editors | 166 | [renderer] |
| overall workbench load | 310 | [renderer] |
| workbench ready | 647 | [main->renderer] |
| extensions registered | 882 | [renderer] |
注目すべき項目は以下のとおり。
register extensions & spawn extension host: 拡張機能の登録とExtension Hostの起動にかかった時間。この値が大きい場合、拡張機能が起動の遅延原因である可能性が高いworkbench ready: 起動開始からUIが操作可能になるまでの経過時間。ユーザーが体感するロード時間に最も近い指標extensions registered: すべての拡張機能の登録が完了するまでの時間。workbench readyより大きい値になることが多く、バックグラウンドで拡張機能の読み込みが続いていることを示す
上記の例では register extensions & spawn extension host が316ms、extensions registered が882msとなっており、拡張機能の読み込みが起動時間の大半を占めていることがわかる。
Extension Activation Stats
拡張機能ごとの起動時間の一覧。
| Extension | Eager | Load Code | Call Activate | Finish Activate | Event |
|---|---|---|---|---|---|
| vscode.git | true | 30 | 3 | 130 | * |
| vscode.npm | true | 12 | 1 | 18 | workspaceContains:package.json |
| GitHub.copilot-chat | false | 531 | 17 | 1681 | onStartupFinished |
| vscode.json-language-features | false | 33 | 0 | 509 | onLanguage:jsonc |
| vscode.markdown-language-features | false | 49 | 6 | 186 | onLanguage:markdown |
| vscodevim.vim | false | 52 | 1 | 147 | onStartupFinished |
| dbaeumer.vscode-eslint | false | 19 | 4 | 0 | onStartupFinished |
各列の意味は以下のとおり。
Eager:trueの場合は起動シーケンス中にアクティベーションされた拡張機能。falseの場合は起動完了後に特定のイベントで遅延アクティベーションされた拡張機能。たとえばworkspaceContains:package.jsonを持つ拡張機能も、起動時点でワークスペース内にpackage.jsonが存在すればtrueになるLoad Code: 拡張機能のコードを読み込むのにかかった時間(ms)Call Activate:activate関数を呼び出すのにかかった時間(ms)Finish Activate:activate関数が完了するまでの時間(ms)Event: アクティベーションのトリガーとなったイベント。*は常に読み込まれる、onStartupFinishedは起動完了後に読み込まれる、onLanguage:xxxは対象言語のファイルを開いたときに読み込まれる
上記の例では GitHub.copilot-chat の Finish Activate は1681msと突出して大きく、起動時間への影響が特に大きい。Finish Activate の値が大きい拡張機能は、activate() 関数内でネットワーク通信やインデックス構築などの非同期処理を行っているケースが多い。
Developer: Show Running Extensions
Developer: Show Running Extensions は現在アクティブな拡張機能とその起動時間を一覧表示するコマンド。
コマンドパレットで Show Running Extensions と入力して実行する。
起動時間でソートして表示されるため、どの拡張機能がボトルネックになっているかを視覚的に特定できる。Developer: Startup Performance のExtension Activation Statsと組み合わせると、より詳細な分析が可能である。
遅い拡張機能への対処
起動時間が長い拡張機能を特定したら、以下の方法で対処できる。
拡張機能を無効化する
使用頻度が低い拡張機能は無効化する。拡張機能の詳細画面から 無効にする を選択する。
ワークスペース単位での無効化も可能なため、不要なプロジェクトでは無効化しておくとよい。
拡張機能をアンインストールする
不要な拡張機能はアンインストールする。インストールしたまま放置した拡張機能が起動を遅くしているケースは多い。
