🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

<iframe id="qiita-embed-content__f34d4d23491f42e1727ff5dc7ebedd28">
</iframe>

重的主要原因

VSCode變慢的最常見原因是安裝的擴展功能的數量或質量。其他原因包括:

  • 打開大型專案時,VSCode所需的資源增加
  • 檔案監視進程(watcherService)消耗大量的記憶體和CPU
  • 在TypeScript專案中的類型檢查和智能提示的負擔

1. 擴展功能的優化【最重要】

確認重的擴展功能

從命令面板(Ctrl + Shift + P)執行「Developer: Show Running Extensions」,可以查看各擴展功能的啟動時間。

Developer: Show Running Extensions

image.png

image.png

啟動時間越長,對效能的影響越大。


使用Extension Bisect找出原因

VSCode具有Extension Bisect功能,可以通過切換擴展功能的啟用狀態,按照二分搜索的方法找出問題擴展功能。

Start Extension Bisect

image.png

image.png

image.png


禁用不必要的擴展功能

從命令面板執行「Extensions: Disable All Installed Extensions」,暫時關閉所有擴展功能,只啟用真正需要的功能。


按工作區管理擴展功能

不同的專案需要的擴展功能各不相同。僅在特定工作區啟用擴展功能,可以減少其他專案的資源消耗。

右鍵擴展功能 > 禁用(工作區)

image.png


審視預設的擴展功能

在擴展功能搜尋框中搜索「@builtin」,將顯示預設安裝的擴展功能清單。禁用不使用的功能。

image.png


禁用擴展功能後的變化有多大?

在我的環境中安裝了40個擴展功能,原本所有擴展功能都啟用。

這些擴展功能中有很多是一開始使用卻最終沒有日常使用的,或是因為推薦而暫時安裝的。

在這種情況下啟動VSCode時的效能如下:
(特別影響大的項目TOP5,列出了三次啟動效能的平均值)

順位 項目 持續時間 處理程序
1 擴展功能登記 2104 [渲染器]
2 工作區準備 1130 [主程序->渲染器]
3 登記擴展功能並啟動擴展主機 780 [渲染器]
4 渲染器準備 551 [渲染器]
5 整體工作區負載 308 [渲染器]

接下來我們來看看如果僅啟用真正需要的擴展功能,效能會有什麼變化。
實際使用的擴展功能減少到20個。

順位 項目 持續時間 處理程序
1 擴展功能登記 1548 [渲染器]
2 工作區準備 961 [主程序->渲染器]
3 登記擴展功能並啟動擴展主機 495 [渲染器]
4 渲染器準備 511 [渲染器]
5 整體工作區負載 270 [渲染器]

與原始效能相比↓

項目 以前的平均 最新的平均 改善量 改善率
擴展功能登記 2104 1548 556 26%
工作區準備 1130 961 169 15%
登記擴展功能並啟動擴展主機 780 495 285 37%
渲染器準備 551 511 40 7%
整體工作區負載 308 270 38 12%

整體的啟動效能有所提升,體感上從啟動到加載時間明顯變快。

像我一樣,堆積了「隨便安裝的」擴展功能的人應該不在少數,建議利用這個機會整理一下。

2. 檔案監視的優化

設定files.watcherExclude

VSCode為了加快運行速度,檔案監視過程會消耗大量記憶體和CPU。請將不需要監視的目錄排除。

// settings.json
{
  "files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/.git/subtree-cache/**": true,
    "**/node_modules/*/**": true,
    "**/dist/**": true,
    "**/build/**": true,
    "**/.vscode/**": true,
    "**/coverage/**": true,
    "**/__generated__/**": true,
    "**/tmp/**": true,
    "**/.cache/**": true
  }
}

設定files.exclude

指定不在側邊欄中顯示的檔案和目錄,可以減輕檔案總管的負擔。

{
  "files.exclude": {
    "**/.git": true,
    "**/.DS_Store": true,
    "**/node_modules": true,
    "**/__pycache__": true,
    "**/.next": true,
    "**/dist": true,
    "**/build": true
  }
}

設定search.exclude

通過從搜索中排除,可以提高搜索性能。

{
  "search.exclude": {
    "**/node_modules": true,
    "**/bower_components": true,
    "**/*.code-search": true,
    "**/dist": true,
    "**/build": true,
    "**/.next": true,
    "**/coverage": true
  }
}

3. TypeScript環境的優化

TypeScript的設定

透過適當指定exclude,可以防止編輯器或構建過程中不必要的文件解析,從而提高性能。
TypeScript預設排除node_modules,但顯式指定也無妨。

// tsconfig.json
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true, // 跳過型別定義文件檢查(加速)
    "forceConsistentCasingInFileNames": true
  },
  "include": [
    "src/**/*"
  ],
  "exclude": [
    "node_modules",
    "dist",
    "build",
    "**/*.spec.ts",
    "**/*.test.ts",
    "coverage"
  ]
}

補充

  • skipLibCheck: true 對性能改善非常有效。
  • exclude 僅對 include 的結果有影響,因此通過匯入引入的文件可能不會被排除。

VSCode的TypeScript輕量化設定

透過禁用TypeScript伺服器的自動日誌輸出及自動型別獲取,可以使編輯器運行更流暢。

// .vscode/settings.json
{
  "typescript.tsserver.log": "off", // 停止tsserver的日誌輸出
  "typescript.disableAutomaticTypeAcquisition": true, // 禁用自動型別獲取
  "typescript.tsserver.experimental.enableProjectDiagnostics": false // 減少大型專案的診斷負擔
}

效果

  • 預期能減少磁碟I/O和CPU負擔。
  • 禁用自動型別獲取(ATA)可防止不必要的外部型別定義下載。

清除TypeScript快取

刪除TypeScript的內部快取,可能在某些環境下改善記憶體使用量和檔案監視負擔。

主要快取文件夾(可能並不在所有環境中存在)

  • Windows: C:\Users\<使用者名稱>\AppData\Local\Microsoft\TypeScript
  • macOS: ~/Library/Caches/Microsoft/TypeScript
  • Linux: ~/.cache/typescript

注意

  • 刪除此文件夾並非「推薦步驟」,而是「可能有效」的改善措施。
  • 刪除後幾乎沒有問題,但因未獲官方保證,請自行承擔風險。

4. 編輯器UI的輕量化

禁用迷你地圖

{
  "editor.minimap.enabled": false
}

禁用麵包屑

{
  "breadcrumbs.enabled": false
}

禁用代碼鏡頭

{
  "editor.codeLens": false
}

隱藏不必要的UI

{
  "workbench.activityBar.visible": false,
  "window.menuBarVisibility": "toggle"
}

5. 自動保存和格式設置的審視

調整自動保存的時機

{
  "files.autoSave": "onFocusChange",
  "files.autoSaveDelay": 1000
}

格式化器的優化

ESLint自動代碼格式化在專案增大時處理時間會增加,可能會留下殭屍進程。

{
  "editor.formatOnSave": true,
  "editor.formatOnType": false,
  "editor.formatOnPaste": false,
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": "explicit"
  }
}

6. Git整合的優化

{
  "git.enabled": true,
  "git.autorefresh": false,
  "git.autofetch": false,
  "git.decorations.enabled": false
}

7. 其他性能設置

文件大小限制

{
  "files.maxMemoryForLargeFilesMB": 4096
}

遠端開發的設定(使用WSL時)

在使用WSL2 + Docker環境的VSCode中,如果出現VmmemWSL大量消耗記憶體的現象,多數是因為檔案監視有問題。請在工作區中應用上述files.watcherExclude設置。

8. 清除快取

定期清除快取,能使運行變得更加流暢。

快取文件夾的位置

Windows的情況

C:\Users\<使用者名稱>\AppData\Local\Code\Cache
C:\Users\<使用者名稱>\AppData\Local\Code\CachedData

macOS的情況

~/Library/Application Support/Code/Cache
~/Library/Application Support/Code/CachedData

注意: 不要刪除User文件夾(設置文件)或extensions(擴展功能)。

9. 設置文件的完整範例

以下是為減少記憶體使用量的綜合設置範例↓

{
  // 檔案監視的排除
  "files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/.git/subtree-cache/**": true,
    "**/node_modules/*/**": true,
    "**/dist/**": true,
    "**/build/**": true,
    "**/.vscode/**": true,
    "**/coverage/**": true,
    "**/__generated__/**": true
  },

  // 從檔案總管排除
  "files.exclude": {
    "**/.git": true,
    "**/.DS_Store": true,
    "**/node_modules": true,
    "**/dist": true,
    "**/build": true
  },

  // 從搜索排除
  "search.exclude": {
    "**/node_modules": true,
    "**/dist": true,
    "**/build": true,
    "**/.next": true,
    "**/coverage": true
  },

  // TypeScript優化
  "typescript.tsserver.log": "off",
  "typescript.disableAutomaticTypeAcquisition": true,

  // UI輕量化
  "editor.minimap.enabled": false,
  "breadcrumbs.enabled": false,
  "editor.codeLens": false,

  // 自動保存和格式
  "files.autoSave": "onFocusChange",
  "editor.formatOnSave": true,
  "editor.formatOnType": false,
  "editor.formatOnPaste": false,

  // Git設置
  "git.autorefresh": false,
  "git.autofetch": false,
  "git.decorations.enabled": false,

  // 其他
  "files.maxMemoryForLargeFilesMB": 4096
}

10. 性能診斷命令

如果想要詳細分析VSCode的性能,請使用以下命令。

命令面板 > Developer: Startup Performance

image.png

該命令會分析啟動中花費時間的具體原因。單位是毫秒,Duration是該項目所花的時間。

總結

應用本文中介紹的設置,可以大幅減少VSCode的記憶體使用量。特別是以下三點最為有效:

  1. 檢視擴展功能:僅啟用真正需要的功能
  2. 優化檔案監視:排除不必要的目錄
  3. 優化TypeScript環境:適當設置tsconfig.json並清除快取

如果這些設置試過後仍未改善,可以考慮重新安裝VSCode,或作為最終手段轉向VSCode Insiders。

定期清除快取,刪除不需要的擴展功能,可以維持舒適的開發環境。


原文出處:https://qiita.com/nolanlover0527/items/071277263f8851012e6b


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝28   💬4   ❤️7
840
🥈
我愛JS
📝2   💬8   ❤️2
113
🥉
御魂
💬1  
4
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付