根本原因是 TypeScript Server(TSServer)反复全量构建 AST 和类型检查,尤其因 node_modules 被扫描或 tsconfig include 配置不当导致;需配置 skipLibCheck、composite、显式 include,并重启 TSServer。

为什么大型 TS/JS 项目 IntelliSense 总是卡在 . 后等 2 秒?
根本不是 VSCode 本身慢,而是 TypeScript Server(TSServer)在反复做全量 AST 构建和类型检查。尤其当 node_modules 被纳入扫描、tsconfig.json 的 include 写成 ["./**/*"] 或留空时,TSServer 会把 dist、build、甚至 coverage 全扫一遍,内存飙到 2GB+,CPU 占满。
必须立刻加的配置项:
-
"skipLibCheck": true—— 关闭对node_modules中类型声明的检查,提速最直接 -
"composite": true+"declarationMap": false—— 启用增量编译,避免每次重算整个项目 -
"include"显式限定源码路径,例如["src/**/*", "types/**/*.d.ts"],严禁模糊写法 - 确认没有冗余的
"typeRoots"指向巨量@types目录;如有,精简为["node_modules/@types"]
改完 tsconfig.json 后,必须手动重启 TSServer:按 Ctrl+Shift+P(macOS 是 Cmd+Shift+P),输入 Restart TS Server 执行,别等它自己恢复。
VSCode 设置里哪些开关一开就拖慢补全?
用户级设置影响所有项目,但真正要动的是当前工作区的 .vscode/settings.json。以下几项在大型项目中建议关闭或调低:
-
"typescript.suggest.autoImports": "inline"(而非true)—— 全量自动导入建议在 10k+ 文件项目里极易卡死 -
"typescript.preferences.includePackageJsonAutoImports": "off"—— 自动补全依赖名会触发额外解析 -
"editor.quickSuggestions"对"comments"和"other"设为false—— 减少非关键场景的提示触发 -
"typescript.tsserver.log": "off"—— 日志写入本身就会拖慢 TSServer(调试时除外)
注意:editor.suggest.delay 可设为 100 缩短弹出等待,但若 TSServer 已过载,调低延迟只会让“加载中…”出现得更频繁。
文件排除不只为了搜索快,更是防 TSServer 崩溃
files.exclude 和 search.exclude 不只是让资源管理器清爽一点,它们直接影响 TSServer 是否会尝试索引那些目录。尤其当项目含 node_modules、dist、build、.git、coverage 时,漏掉任一都可能让语言服务卡住。
在 .vscode/settings.json 中至少加上:
{
"files.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/build": true,
"**/.git": true,
"**/coverage": true
},
"search.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/build": true,
"**/*.log": true
},
"files.watcherExclude": {
"**/node_modules/**": true,
"**/dist/**": true,
"**/build/**": true
}
}
Linux/macOS 用户还要留意 ENOSPC 错误:文件监视器达到上限会导致索引停滞。临时修复命令:echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p。
扩展不是越多越好,特别是这些“智能提示型”插件
多个提示类插件同时运行,比如 Volar + Vetur、Pylance + Python(旧版)、ESLint + IntelliCode,容易争抢 CPU、干扰 LSP 通信,甚至互相覆盖语言服务。
排查建议:
- 打开命令面板,执行
Extensions: Disable All Installed Extensions - 逐个启用,每启一个就测试
Go to Definition和.补全是否响应正常 - 重点关注:TypeScript/JavaScript 相关语言服务、ESLint、Prettier、GitLens、IntelliCode
- 使用
Help → Extension Runtime Status查看各扩展启动耗时和内存占用,优先停用高开销插件
真正卡住的地方,往往不是配置没写对,而是改了 tsconfig.json 没重启 TSServer,或者以为禁用了插件其实只是点了“禁用工作区”,忘了点“禁用全局”。



















