VSCode 大项目卡顿的根本原因是默认配置未裁剪,禁用非必要扩展(如 GitLens、Auto Import)、关闭高开销内置功能(如自动导入、快速建议)、限制 TypeScript 服务范围、排除 node_modules 等目录监视、拆分工作区可显著提升性能。

VSCode 在打开大型项目时变卡、内存飙升、搜索/跳转变慢,根本原因不是 VSCode 本身不行,而是默认配置没针对大项目做裁剪——关掉几个默认开启的“智能”功能,效果立竿见影。
禁用非必要扩展与内置功能
大量扩展(尤其是 ESLint、Prettier、GitLens、TypeScript 自动导入类)会在后台持续扫描、解析、监听文件,对百万行级项目是内存杀手。内置功能如 typescript.preferences.includePackageJsonAutoImports 或 editor.quickSuggestions 也会触发高频语言服务请求。
- 在命令面板(
Ctrl+Shift+P)中运行Extensions: Show Built-in Extensions,禁用GitLens、Auto Import、Path Intellisense等非核心扩展 - 在
settings.json中显式关闭高开销功能:{ "typescript.preferences.includePackageJsonAutoImports": "off", "editor.quickSuggestions": false, "editor.suggest.snippetsPreventQuickSuggestions": true, "files.watcherExclude": { "**/node_modules/**": true, "**/dist/**": true, "**/build/**": true, "**/.git/**": true } } - 特别注意:GitLens 的
gitlens.advanced.files.exclude默认为空,务必手动设为["**/node_modules/**", "**/dist/**"],否则它会为每个 JS/TS 文件发起 Git blame 查询
调整 TypeScript 语言服务范围
TypeScript 语言服务(TSServer)是 VSCode 处理 TS/JS 项目最重的后台进程。默认它会尝试索引整个工作区,包括 node_modules 和构建产物,导致内存占用常超 2GB。
- 在项目根目录添加
tsconfig.json(即使项目是 JS),并严格限定include:{ "compilerOptions": { "skipLibCheck": true, "moduleResolution": "node" }, "include": ["src/**/*", "types/**/*"], "exclude": ["node_modules", "dist", "build", "coverage"] } - 设置
"typescript.preferences.useAliasesForBuiltinTypes": false,避免 TSServer 为Array、Promise等全局类型反复解析声明文件 - 若项目不依赖完整类型检查,可临时关闭 TS 插件:在设置中搜
typescript.suggest.autoImports→ 设为false;或直接禁用TypeScript and JavaScript Language Features扩展(仅保留 TS 官方插件)
文件监视与搜索性能调优
VSCode 默认使用操作系统原生文件监视器(如 Linux 的 inotify、macOS 的 fsevents),但大项目下易触发系统限制或轮询 fallback,导致 CPU 持续 100%、搜索无响应。
- 增大系统 inotify 限制(Linux/macOS):
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
- 在
settings.json中启用更轻量的搜索模式:{ "search.followSymlinks": false, "search.useRipgrep": true, "search.maintainFileSearchCache": false, "search.exclude": { "**/node_modules": true, "**/dist": true, "**/build": true, "**/*.log": true } } - 避免用
Ctrl+P全局文件搜索(workbench.action.quickOpen)查找非当前目录文件;改用Ctrl+Shift+P→Files: Open Recent或在资源管理器中展开子目录后按名称过滤
工作区拆分与多窗口策略
单工作区加载整个 monorepo 或含多个子系统的项目,等于让 VSCode 同时维护 N 套语言服务、N 份文件监视器——这不是优化能解决的问题,必须结构上隔离。
- 不要把整个
packages/目录拖进一个窗口;为每个子包单独建.code-workspace文件,例如:{ "folders": [ { "path": "packages/core" }, { "path": "packages/ui" } ], "settings": { "files.watcherExclude": { "**/../*": true } } } - 禁用跨工作区索引:确保每个
.code-workspace的typescript.preferences.disableAutomaticTypeAcquisition为true,防止 TS 插件偷偷下载 @types 包 - 浏览器开发调试时,关闭
debug.javascript.autoAttachFilter(设为"disabled"),否则 VSCode 会持续扫描所有 Chrome 进程,拖慢主界面响应
真正卡顿的根源往往不在“怎么加速”,而在“哪些东西本不该启动”。大项目里,少一个自动导入、少一次 node_modules 类型推导、少一层递归文件监听,内存就省下 300MB——这些不是配置技巧,是取舍判断。










