Closed gegoune closed 2 years ago
I just tried with the visible as true and hiding dotfiles in my Dropbox
folder which doesn't really contain hidden files (that I put here, might have dropbox's) and it's quite slow, also tried in a very small go project with like 2 hidden files, and it was the same result.
I can't make sense of this one @akinsho. The only thing the hidden file check does is check to see if the first character is a dot. Of all the things that happen between the command and completing the render, that's probably the lightest weight feature.
Gitignore logic is much heavier and I can see how issues there can cause slowdowns. Could it be that it's specifically the hide_gitignore
option that is the issue?
@cseickel I tried playing around with variations of those three options and as you say it seems to primarily be due to hide_gitignore
it seems to really slow things down to have it set to true (if visible is also true).
@akinsho If you check out branch 236-gitignored-slowdown
and enable trace
logging like you did before, it will output much more verbose logging in the mark_ignored
method. Can you give it a try and post those logs? It should look like this:
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] .../packer/start/neo-tree.nvim/lua/neo-tree/git/ignored.lua:52: ================================================================================
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] .../packer/start/neo-tree.nvim/lua/neo-tree/git/ignored.lua:53: IGNORED: mark_ignore BEGIN...
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /home/cseickel/repos/neo-tree.nvim/.github ' is ' /home/cseickel/repos/neo-tree.nvim '
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /home/cseickel/repos/neo-tree.nvim ' is ' /home/cseickel/repos/neo-tree.nvim '
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /home/cseickel/repos/neo-tree.nvim/doc ' is ' /home/cseickel/repos/neo-tree.nvim '
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /home/cseickel/repos/neo-tree.nvim/lua ' is ' /home/cseickel/repos/neo-tree.nvim '
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /home/cseickel/repos/neo-tree.nvim/plugin ' is ' /home/cseickel/repos/neo-tree.nvim '
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /home/cseickel/repos/neo-tree.nvim/tests ' is ' /home/cseickel/repos/neo-tree.nvim '
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /home/cseickel/repos/neo-tree.nvim/lua/neo-tree ' is ' /home/cseickel/repos/neo-tree.nvim '
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /home/cseickel/repos/neo-tree.nvim/lua/neo-tree/git ' is ' /home/cseickel/repos/neo-tree.nvim '
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /home/cseickel/repos/neo-tree.nvim/lua/neo-tree/events ' is ' /home/cseickel/repos/neo-tree.nvim '
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /home/cseickel/repos/neo-tree.nvim/lua/neo-tree/sources ' is ' /home/cseickel/repos/neo-tree.nvim '
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /home/cseickel/repos/neo-tree.nvim/lua/neo-tree/ui ' is ' /home/cseickel/repos/neo-tree.nvim '
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /home/cseickel/repos/neo-tree.nvim/lua/neo-tree/command ' is ' /home/cseickel/repos/neo-tree.nvim '
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] ...ck/packer/start/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /home/cseickel/repos/neo-tree.nvim/lua/neo-tree/setup ' is ' /home/cseickel/repos/neo-tree.nvim '
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] .../packer/start/neo-tree.nvim/lua/neo-tree/git/ignored.lua:70: IGNORED: Running cmd: { "git", "-C", "/home/cseickel/repos/neo-tree.nvim", "check-ignore", "/home/cseickel/repos/neo-tree.nvim/.github", "/home/cseickel/repos/neo-tree.nvim/.stylua.toml", "/home/cseickel/repos/neo-tree.nvi...
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] .../packer/start/neo-tree.nvim/lua/neo-tree/git/ignored.lua:86: IGNORED: Checking types of 1 items to see which ones are directories
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] .../packer/start/neo-tree.nvim/lua/neo-tree/git/ignored.lua:96: IGNORED: Comparing results to mark items as ignored
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] .../packer/start/neo-tree.nvim/lua/neo-tree/git/ignored.lua:107: IGNORED: mark_ignored is complete, ignored: 1 , not ignored: 29
[TRACE Tue 12 Apr 2022 12:15:36 PM UTC] .../packer/start/neo-tree.nvim/lua/neo-tree/git/ignored.lua:108: ================================================================================
@cseickel just gave it a try, it looks to me like the block happens before all the additional logging as the buf enter event starts at 13:55:55 but the next logs arent till 13:56:02.
EDIT: Did another shorter log with more consistent logging 🤷🏿♂️ not sure why this one doesn't have the large gap
@akinsho There is not actually any delay for the BufEnter event, that event is just the end of the startup related events. The delay between that and the next action is the time it takes you to realize that nvim is ready, and then type in your command. The actual start of that command execution is at:
[TRACE Tue 12 Apr 13:36:02 2022] ...acker/opt/neo-tree.nvim/lua/neo-tree/sources/manager.lua:388: Revealing current file
What follows is some extremely long delays in determining the git root for each folder:
[TRACE Tue 12 Apr 13:36:03 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:03 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:03 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/Shifty-API ' is ' /Users/akin/projects/personal/Shifty-API '
[TRACE Tue 12 Apr 13:36:03 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/bufferline.nvim ' is ' /Users/akin/projects/personal/bufferline.nvim '
[TRACE Tue 12 Apr 13:36:03 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:03 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/dependency-assist.nvim ' is ' /Users/akin/projects/personal/dependency-assist.nvim '
[TRACE Tue 12 Apr 13:36:04 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/flutter-tools.nvim ' is ' /Users/akin/projects/personal/flutter-tools.nvim '
[TRACE Tue 12 Apr 13:36:04 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/git-conflict.nvim ' is ' /Users/akin/projects/personal/git-conflict.nvim '
[TRACE Tue 12 Apr 13:36:04 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/git-repo ' is ' /Users/akin/projects/personal/git-repo '
[TRACE Tue 12 Apr 13:36:04 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/gogazer ' is ' /Users/akin/projects/personal/gogazer '
[TRACE Tue 12 Apr 13:36:04 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:04 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/interviews ' is ' /Users/akin/projects/personal/interviews '
[TRACE Tue 12 Apr 13:36:04 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/org-bullets.nvim ' is ' /Users/akin/projects/personal/org-bullets.nvim '
[TRACE Tue 12 Apr 13:36:05 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/phoenix-kitty ' is ' /Users/akin/projects/personal/phoenix-kitty '
[TRACE Tue 12 Apr 13:36:05 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/pubspec-assist.nvim ' is ' /Users/akin/projects/personal/pubspec-assist.nvim '
[TRACE Tue 12 Apr 13:36:05 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/toggleterm.nvim ' is ' /Users/akin/projects/personal/toggleterm.nvim '
[TRACE Tue 12 Apr 13:36:05 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/works_worth ' is ' /Users/akin/projects/personal/works_worth '
[TRACE Tue 12 Apr 13:36:05 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:05 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:05 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:06 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:06 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:06 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:06 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:06 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:06 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:06 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:07 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/.dotfiles ' is ' /Users/akin/.dotfiles '
[TRACE Tue 12 Apr 13:36:07 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:07 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/.fzf ' is ' /Users/akin/.fzf '
[TRACE Tue 12 Apr 13:36:07 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:07 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:07 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:07 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:08 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:08 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:08 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:08 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:08 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:08 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:08 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:09 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:09 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:09 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:09 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:09 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:09 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:10 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:10 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:10 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:10 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:10 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:10 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:10 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:11 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/homebrew ' is ' /Users/akin/homebrew '
[TRACE Tue 12 Apr 13:36:11 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:11 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:11 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/gogazer/app ' is ' /Users/akin/projects/personal/gogazer '
[TRACE Tue 12 Apr 13:36:11 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/gogazer/database ' is ' /Users/akin/projects/personal/gogazer '
[TRACE Tue 12 Apr 13:36:11 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/gogazer/github ' is ' /Users/akin/projects/personal/gogazer '
[TRACE Tue 12 Apr 13:36:11 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/gogazer/models ' is ' /Users/akin/projects/personal/gogazer '
[TRACE Tue 12 Apr 13:36:12 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:22: GIT ROOT for ' /Users/akin/projects/personal/gogazer/ui ' is ' /Users/akin/projects/personal/gogazer '
[TRACE Tue 12 Apr 13:36:12 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
[TRACE Tue 12 Apr 13:36:12 2022] ...pack/packer/opt/neo-tree.nvim/lua/neo-tree/git/utils.lua:13: GIT ROOT ERROR {}
That is where the problem is.
The second example goes much faster because you are inside of a single git project instead of a folder with 17 different repositories and what looks like 20 - 30 other folders that are either not git repos, or just throwing errors for some other reasons. I would bet it works fine when browsing any other root folder.
Honestly, I'm not sure I even need to have the git root for this command to work. I'll see if I can skip that with the current implementation.
@akinsho I just pushed an update to the 236-gitignored-slowdown
branch that removes the git root lookup from the git ignored lookups. I don't know if this will completely fix the problem or not, but it will probably make it faster.
@cseickel that looks to have helped a lot 👍🏿 I had a look at the commit and noticed you were using systemlist
which I'm sure you know is blocking and almost certainly the cause of the slowdown as it making a bunch of those calls in a loop. I wonder if this couldn't be done asynchronously using plenary and the highlighting added only when all the calls have been made, it might cause the styling to "flash" but I think if all calls happened simultaneously it would be quite quick probably and a user might never see it.
This is assuming the calls are actually necessary at all 🤷🏿
@akinsho The synchronous blocking calls were intentional because in most cases, it's not a highlight that we want but determining whether or not these files should be visible at all. We do exactly as you are describing with the git status calls, which makes more sense there because we are just adding decorations to items that would be there regardless of their git status.
It would be possible to handle this within the async git status render if the current setting was visible = true
.
In the case of visible = false
, the only thing I can think of is to cache the results of prior calls and use those cached results within the first render, then update in the background. That first render per session would be wrong though.
One very important question: How fast is it now?
This is assuming the calls are actually necessary at all 🤷🏿
You know, I probably don't need to check-ignored on closed folders because if their parents are in a repo, then their ignored status would have been reported by the check on that folder. If they are repo roots themselves then they can't be ignored. I'll add that change.
You know, I probably don't need to check-ignored on closed folders because if their parents are in a repo, then their ignored status would have been reported by the check on that folder. If they are repo roots themselves then they can't be ignored. I'll add that change.
Actually, scratch that. It already works this way. As far as I know, the calls I have now are the only way to do this work accurately. There have been many iterations to get to this point and many edge cases fixed.
One very important question: How fast is it now?
@cseickel sorry should have clarified it's as fast as it is with visible set to false
(normal speed for me). I guess if it's not required, then it simplifies your solution 👍🏿
sorry should have clarified it's as fast as it is with visible set to
false
(normal speed for me)
Assuming "normal speed" is good for you, I will call this issue closed then.
Thanks so much for taking the time to investigate and test out this issue with me @akinsho. Your feedback was incredibly helpful and I'm sure many people will benefit from these improvements.
@cseickel no worries, thanks for your work on this plugin, really liking all the subtle UI touches 🚀. Sorry re. the ambiguous "normal speed" basically just meant fast enough that I don't think about it any more. It's definitely well within what I need to work, although as I think was mentioned earlier in this thread it is slightly slower to open the first time than nvim-tree
, but definitely very good. Although I think this plugin is likely doing more on startup than nvim-tree
so a reasonable tradeoff IMO
For https://github.com/nvim-neo-tree/neo-tree.nvim/issues/236#issuecomment-1097648309, it'd be great to use a threadpool or plenary's job https://github.com/nvim-lua/plenary.nvim/blob/master/lua/plenary/job.lua
Edit: I read the entire thread, ignore this comment :)
Hi, apologies for poor issue here but don't have much time at the moment so putting it here in case it will easily indicate what the problem is. Will try to update this issue with more meaningful information next week.
When opening filesystem tree there is a very small but noticeable delay (before window opens) during which my cursor blinks few times (I don't have blinking cursor in my terminal). Delay is of about half a sec or even less, hard to tell and am not sure how to measure it. For reference both git_status and buffers trees open immediately without blinking the cursor (or at least it happens so fast that I can't see it). I have tested nvim-tree, which opens immediately for the same file in the same repository so I doubt it's IO issue. Perhaps some redrawing for new conteiners? I am not sure if it was like that before though, can try to bisect next week.