【发布时间】:2023-01-30 06:27:39
【问题描述】:
我在 TypeScript 中设置了一个简单的项目。我正在使用 Prisma 连接数据库,express 用于 HTTP 服务器,Zod 用于验证请求主体。我也在使用 eslint,它在每次保存文件时运行。在键入代码时,建议需要大约 2-3 秒才能加载,这变得非常烦人,对我来说这似乎不是正常行为。
例如:加载使用 Zod 模式解析的对象的建议或加载 Prisma Client 的建议通常需要大约 2 秒。我不确定这是否完全是 Zod/Prisma 问题,尽管我在 Webstorm 中打开了这个项目并且出现了同样的问题,也许速度稍快但仍然可以看到明显的延迟。我没有成功的尝试:
- 在另一台机器上打开项目
- 禁用所有扩展
- 正在重新安装 VS 代码
- 安装旧版本的 VS 代码
- 使用不同版本的 TypeScript 编译器
例子:
的一部分TS 服务器日志:
...
Info 277 [21:17:19.421] getCompletionData: Get current token: 0.012008000165224075
Info 278 [21:17:19.421] getCompletionData: Is inside comment: 0.028876000083982944
Info 279 [21:17:19.421] getCompletionData: Get previous token: 0.024034999776631594
Info 280 [21:17:19.421] getCompletionsAtPosition: isCompletionListBlocker: 0.131608999799937
Info 281 [21:17:21.381] getCompletionData: Semantic work: 1959.9019869999029
Info 282 [21:17:21.388] getCompletionsAtPosition: getCompletionEntriesFromSymbols: 5.953261999879032
Info 283 [21:17:21.733] IntelliCode plugin: successfully loaded model from /home/xkcm/.vscode/extensions/visualstudioexptteam.vscodeintellicode-1.2.29/dist/bundledModels/javascript_intellisense-members
...
如您所见,getCompletionData 操作大约需要 2 秒才能完成。我还将附上我的 typescript 和 eslint 配置。
tsconfig.json文件
{
"compilerOptions": {
"module": "NodeNext",
"moduleResolution": "NodeNext",
"target": "ES2015",
"sourceMap": true,
"outDir": "dist/",
"experimentalDecorators": true,
"skipLibCheck": true
},
"include": [
"./src/**/*"
]
}
.eslintrc.cjs文件
module.exports = {
extends: [
"airbnb-base",
"airbnb-typescript/base"
],
parser: "@typescript-eslint/parser",
plugins: ["@typescript-eslint"],
root: true,
ignorePatterns: [
".eslintrc.cjs",
"dist/**/*",
"node_modules/**/*"
],
parserOptions: {
project: "./tsconfig.json"
},
rules: {
"@typescript-eslint/quotes": ["error", "double"],
"curly": ["error", "all"],
"no-console": ["error", { allow: ["info", "warn", "error"] }],
"no-use-before-define": ["error", { functions: false, classes: false }],
"@typescript-eslint/brace-style": ["error", "1tbs", { allowSingleLine: false }],
"import/prefer-default-export": "off",
"max-classes-per-file": "off"
}
};
还有我在项目中的依赖列表:
"dependencies": {
"@prisma/client": "^4.8.0",
"chalk": "4.1.2",
"dotenv": "^16.0.3",
"express": "^4.18.2",
"morgan": "^1.10.0",
"winston": "^3.8.2",
"zod": "^3.20.2"
},
"devDependencies": {
"@types/express": "^4.17.15",
"@types/lodash": "^4.14.191",
"@types/node": "^18.11.17",
"@types/winston": "^2.4.4",
"@typescript-eslint/eslint-plugin": "^5.46.1",
"@typescript-eslint/parser": "^5.46.1",
"dotenv-cli": "^6.0.0",
"eslint": "^8.30.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-config-airbnb-typescript": "^17.0.0",
"eslint-plugin-import": "^2.26.0",
"nodemon": "^2.0.20",
"prisma": "^4.7.1",
"ts-node": "^10.9.1",
"typescript": "^4.9.4"
}
我的环境:
- VS 代码:1.74.2-1671533413
- 打字稿:4.9.4
- 节点:v16.13.1
这是正常行为吗?有谁知道为什么会这样?如果我至少能理解为什么需要这么长时间,那就太好了。这变得非常令人沮丧,感谢任何帮助,在此先感谢!
编辑:我注意到当自动完成加载时我的 CPU 使用率飙升至 100%,这可能是 TypeScript 问题吗?
编辑 2: 我删除了zod包,问题似乎没有了,很奇怪。 TypeScript repo 中的相关问题:https://github.com/microsoft/TypeScript/issues/45824
编辑 3: 我发现将 zod 包降级为 v3.19.1 也可以解决这个问题。在他们的 GitHub 上有一个关于 v3.20.2 的性能问题的问题:https://github.com/colinhacks/zod/issues/1741
【问题讨论】:
-
与 zod@3.20.2 有同样的问题,降级到 3.19.1,它更好但仍然需要时间或卡住
标签: node.js typescript performance autocomplete