描述错误
由于更新到 105.4.0 的 VS Code 扩展,格式化程序在保存 .svelte 文件时真的很慢或冻结,这使我几乎每次保存文件时都必须从 VS Code 提示中跳过格式化。
项目中存在jsconfig.json
,它在我的项目的根目录中映射了几个别名。
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"#js/*": ["./client_src/js/*"],
"#api/*": ["./server_src/api/*", "./client_src/js/api/*"],
"#api/scripts/*": ["./server_src/scripts/api/*"],
"#api/webapps/*": ["./server_src/webapps/api/*"],
"#api/restapps/*": ["./server_src/restapps/api/*"],
}
},
"exclude": ["node_modules"]
}
https://code.visualstudio.com/docs/languages/jsconfig
如果我删除此文件,格式化程序会按预期工作。
102.3.0版本没有这个问题,我同时降级到那个版本。
再现
在项目中添加一个jsconfig.json
文件,内容似乎无关紧要。
我添加了一个空的jsconfig.json
文件,或者一个空的对象,这会导致格式化程序冻结。
预期行为
格式化代码而不冻结。
截图
系统(请填写以下信息):
您可以尝试添加包含和排除吗 (https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) 如果没有 tsconfig 或 jsconfig,我们将默认排除 node_modules 和 dist 文件。
也许#639 不知何故有不好的副作用,在这种情况下运行太频繁/花费太长时间?
你的exclude
正确吗? 我在那里没有看到像dist
的东西,可能是因为 #639 每次都会扫描生成文件的文件夹(如dist
)并添加文件,因为它是不排除。
我将排除更改为这个,现在它似乎工作得更好,如果我重新加载编辑器,第一个格式仍然很慢,但所有后续格式现在都按预期运行(至少在过去的半小时里我一直在测试它)。
添加了 dist 以防万一,但 dist 文件夹是空的,我仍然遇到问题。
{
"exclude": ["node_modules", "**/node_modules", "dist"]
}
这是一个相当古老的大型项目,其中 CMS 中的功能构建为完全自包含的独立模块,因此它们都有自己的 node_modules 文件夹和 package.json 来处理该模块的依赖项。
Svelte 扩展输出这个所以有几个文件😛
SnapshotManager File Statistics:
Project files: 527
Svelte files: 32
From node_modules: 1342
几个月前刚刚推出了 Svelte,到目前为止它一直运行良好。
527对我来说仍然很多。 这真的是一个很大的应用程序。
注意到报告的大多数格式化性能问题实际上不是格式化问题,而是更一般的性能问题。 只是格式化更容易发现。 我们可能仍然需要在这里和那里调整性能。
我猜这些文件大部分来自其他项目。 因为根目录下只有 jsconfig,所以即使不需要,也会加载所有内容。 我也认为我们在那里不能做太多。 初始加载很可能是 TS 服务读取配置文件,然后最初扫描和加载所有 js/ts 文件。 由于这是同步的,我们基本上无法做任何其他事情。
是的,这是一个相当大的网站,已经有几年的历史了,而且还在不断发展。
有几个独立的 Svelte 应用程序用作编辑器的模块。
所以大部分代码库与 Svelte 无关,但所有内容都在同一个存储库中。
排除结构中更深层次的 node_modules 文件夹似乎暂时解决了我的问题。
之前在项目中使用相同的 jsconfig 文件多年没有任何问题,最后一次编辑是在 2 年前。
如果您不需要参考此问题进行性能调整,我们可能会关闭它
我不认为这与您的问题有关,但我也遇到了一些非常糟糕的冻结滞后行为。
似乎它总是一个步骤或后面的变化或其他什么? 报告错误非常不一致。
我需要有关您的项目及其发生情况的更多信息。
如果回购不是私人的,如果我能看看就好了。
我试图不必要地打开一个单独的问题,但我认为我的问题可能足够不同以至于需要一个。 我也会尝试制作一个最小的回购。 项目很小。
我也有一个非常缓慢的格式化体验,但没有 jsconfig.json。
相反,我使用带有 tsconfig.json 的打字稿。 查看 Svelte 输出显示
SnapshotManager File Statistics:
Project files: 15
Svelte files: 71
From node_modules: 473
Total: 567
我在 tsconfig 中排除了node_modules
但结果是一样的,我怀疑这是性能不佳的原因。
有什么建议么? 谢谢。
格式化只是在启动时变慢还是一直很慢? 如果只是在启动时 - 我们无能为力,所有文件都会在启动时加载,这会阻止扩展一小段时间。
我需要有一个最低限度的可重复性来缩小这个问题的范围。
很难概括这个问题。 小项目似乎没有受到影响,至少没有那么大。 但我的“更大”项目的行为是这样的:
随着时间的推移,格式化会变慢。 较小的文件在 Vs Code 启动后工作就好了。 但是对于一些较大的文件(大约 15 个其他苗条组件的导入,300 LOC)格式化从一开始就很慢(大约需要 10-15 秒)并且只会变得更糟。 随着时间的推移,较小的文件似乎变慢了,但这很难重现。
我该怎么做才能为您获取更多有用的信息? 我无法将项目发送给您,因为它是客户的内部资料。
你能以某种方式匿名吗? 因此,例如删除所有内部依赖项,提取一个大组件并将其内容替换为 lorem ipsum 内容并导入其他占位符组件。 在提取过程中,您可能还会发现问题不再可重现,这有助于缩小原因。
我刚刚意识到可能是什么原因,至少对于“大”苗条组件中的持续滞后:
它是一个使用 json 文件作为测试数据的游乐场(包含约 3.500 个项目的数组)。
import testData from './testData.json';
有什么方法可以让工具忽略这些文件?
@kuechlerm您找到忽略数据导入的方法了吗?
@IgorMitev没有:(
我猜你已经在resolveJsonModule
中将true
tsconfig.json
? 这意味着 TS “导入并分析该文件”,这很慢且无法避免。 如果您将resolveJsonModule
为false
并提供d.ts
声明,该声明告诉 TS 假设任何以.json
结尾的文件都可以,如下所示:
declare module "*.json" {
const value: any;
export default value;
}
然后文件不被分析,它应该更快。 缺点是您不再有 JSON 模块的类型定义,如果您指定的路径中没有 JSON 文件,TS 也不会出错。
@dummdidumm这是一个非常好的提示! 谢谢。