-
Notifications
You must be signed in to change notification settings - Fork 12.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Very slow intellisense (10-30s until suggestions appear) #32826
Comments
Update:
Result: No difference. |
@Floriferous are you using custom version of TS server? Could you check TS version at the start of However it was noticeable with high values after |
Probably not related, we've had this issue for months.. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
@Floriferous Moving upstream so that TypeScript team members can provide help with investigating this further As a first step, using the latest VS Code (1.37) with all extensions disabled, please try using the latest TypeScript version by installing this extension: https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-typescript-next Does this make any improvements to the performance? |
@Floriferous Please use latest nightly of typescript and share the complete tsserver log to be able to investigate this. If you want to share the tsserver log privately here is how:
|
@sheetalkamat Just a heads up: we removed the log uploader functionality in VS Code 1.37 as our team wasn't really using it |
@mjbvz That's unfortunate.. I liked that feature for it was easy and clean way to send logs privately. |
@mjbvz Using the latest version of TypeScript does not fix the issue. I'd love to be able to send you logs privately, too bad the feature is gone. I can't share more logs than what I did above on GitHub. |
@Floriferous Please email them to me at shkamat at microsoft dot com. |
@andersHj I think in your case its just recreating new program, but to know more, please share tsserver log and if possible repro too. |
Hi, thanks for your reply! So if I understand correctly whenever the project structure is changed (create/delete/move file) it will have to rebuild the entire project which is pretty slow in a relatively large project, and intellisense will wait for that to complete. Here is the log for what happened when I created a new file (I removed 2516 * 6 lines containing filenames to make it more readable and hide some project info). |
@andersHj this seems like takes long time to recreate program. You can further run |
When I run that command it "only" takes 6 seconds and here is the output:
|
@andersHj We would need your repro code to investigate this further given the discrepancies between command line and tsserver timings... You can share it privately as well at shkamat at microsoft dot com if you want. we can sign nda as well if needed. |
Was this issue ever resolved or brought to a conclusion? I have the same experience when creating/deleting files, the project is recreated, which takes 10-20 seconds (around 4K files). However, when executing the |
No, it's still killing our VSCode experience for us. Extracting reproductions and all just takes a lot of time away from real work! Will get to it sometime in the future, I've learned to live without good intellisense for now, it's just like before VSCode. |
An educated guess: When tsserver runs out of its memory limit, there's a workaround that makes it restart itself. I've noticed that editing code that involves recursive types (such as when trying to add/remove parentheses around ramda's |
I can reproduce this issue in Ghost repo, for example
|
I think i find workaround - use tsconfig (with allowJs) instead jsconfig. Seems now all working excellent. In my project about 2500 files: jsconfig
tsconfig
|
Not sure if it's placebo, but it does seem to help! Thanks @frmhd :) |
Nevermind, I think the real bug is in JSDoc parsing: /**
* @template T
* @typedef {{
$A: {
[K in keyof T]?: XMLObject<T[K]>[]
},
$O: {
[K in keyof T]?: {
$$?: Record<string, string>
} & (T[K] extends string ? {$:string} : XMLObject<T[K]>)
},
$$?: Record<string, string>,
} & {
[K in keyof T]?: (
T[K] extends string ? string
: XMLObject<T[K]>
)
}} XMLObject<T> */ and export type XMLObject<T> = {
$A: {
[K in keyof T]?: XMLObject<T[K]>[]
},
$O: {
[K in keyof T]?: {
$$?: Record<string, string>
} & (T[K] extends string ? {$:string} : XMLObject<T[K]>)
},
$$?: Record<string, string>,
} & {
[K in keyof T]?: (
T[K] extends string ? string
: XMLObject<T[K]>
)
}; Are parsed differently. The JavaScript (JSDocs) version goes into an infinite loop. |
Thank you so much, work for me |
I’m going to close this as perf issues are a constantly moving target and this issue never contained the specifics that would let us narrow down to a specific cause. In the last two years we’ve fixed a lot of performance problems and surely some things have also regressed without us knowing. For anyone filing performance issues in the future, please first read https://github.com/microsoft/TypeScript/wiki/Performance and do a bit of investigating for yourself so we can focus in on specific problems. TS Server logs are a bare minimum requirement for us to investigate an issue, but full repros are much better. When something is slow, make sure you say specifically what. “IntelliSense” I guess is a catch-all term for language intelligence features in an editor, so please distinguish between error display, quick info (hover tooltips), completions (autocomplete dropdown menu as you type), auto imports, etc. Thanks! |
Related to a lot of other issues (#53541, microsoft/vscode#72616, microsoft/vscode#2994). Immediately after opening VSCode, and after JS/TS language features has been initialized, requesting anything from intellisense takes upward of 10 seconds. Which slowly increases to 20-30 seconds.
I logged the TSServer logs in verbose, here are a few snippets. I noticed that it keeps logging all 1700 files in our repo all the time, not sure if this is normal, or just because I'm logging in verbose mode.
To produce these logs:
JSconfig
Here's my JSConfig, notice that I tell it to ignore
node_modules
, but below there are some logs where it is initiating someting from a particular node_nodule (node_modules/cypress/types
) (not sure if related):My vscode workspace config
Log (Window)
EDIT: This warning has been fixed without any impact on this issue.
In the
Log (Window)
output I can see the following error:TSServer log excerpt 1
Here a missing file is mentioned, I believe this is the moment I hit the keyboard shortcut to request an intellisense completion:
TSServer log excerpt 2
Here's the next event, it's throttled:
TSServer log excerpt 3
I think this is just after autocompletion arrived:
TSServer log excerpt 4
Updating diagnostics, there is a mention of a
geterr
command, not sure why it is mentioning thecypress
package, as if there was something wrong with it?:The text was updated successfully, but these errors were encountered: