【问题标题】:Slow TypeScript autocompletion in VS Code for ZodZod 的 VS Code 中的 TypeScript 自动完成速度较慢
【发布时间】: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


【解决方案1】:

zod@3.20.2 导致了这个问题,降级到 3.19.1 修复了它。

【讨论】:

    【解决方案2】:

    tsconfig.json 添加compilerOptions.strict = true

    它对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 2017-06-11
      • 2019-09-08
      • 1970-01-01
      相关资源
      最近更新 更多