perf(#3231): decrease setup time: optimise setup and defer requires until tree open#3308
Open
alex-courtis wants to merge 23 commits intomasterfrom
Open
perf(#3231): decrease setup time: optimise setup and defer requires until tree open#3308alex-courtis wants to merge 23 commits intomasterfrom
alex-courtis wants to merge 23 commits intomasterfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
fixes #3253
fixes #3231
nvim-tree is now completely lazy on startup and requires the minimum when:
setup time ~1ms, down from ~8ms, see #3229 timings
@przepompownia @perrin4869 I would be most grateful for your testing of this branch, ensuring that the load times have been significantly reduced.
Using minimal config:
log
log
log
``` --- Startup times for process: Primary (or UI client) ---times in msec
clock self+sourced self: sourced script
clock elapsed: other lines
000.001 000.001: --- NVIM STARTING ---
000.064 000.063: event init
000.108 000.045: early init
000.126 000.017: locale set
000.146 000.021: init first window
000.342 000.196: inits 1
000.347 000.005: window checked
000.349 000.002: parsing arguments
000.665 000.026 000.026: require('vim.shared')
000.714 000.022 000.022: require('vim.inspect')
000.741 000.023 000.023: require('vim._options')
000.742 000.075 000.031: require('vim._editor')
000.743 000.124 000.023: require('vim._init_packages')
000.744 000.270: init lua interpreter
001.391 000.647: nvim_ui_attach
001.565 000.174: nvim_set_client_info
001.566 000.001: --- NVIM STARTED ---
--- Startup times for process: Embedded ---
times in msec
clock self+sourced self: sourced script
clock elapsed: other lines
000.001 000.001: --- NVIM STARTING ---
000.081 000.081: event init
000.139 000.058: early init
000.158 000.019: locale set
000.171 000.012: init first window
000.318 000.148: inits 1
000.324 000.006: window checked
000.325 000.001: parsing arguments
000.594 000.022 000.022: require('vim.shared')
000.642 000.021 000.021: require('vim.inspect')
000.666 000.019 000.019: require('vim._options')
000.667 000.072 000.032: require('vim._editor')
000.668 000.109 000.016: require('vim._init_packages')
000.669 000.234: init lua interpreter
000.701 000.033: expanding arguments
000.709 000.008: inits 2
000.846 000.137: init highlight
000.846 000.000: waiting for UI
000.906 000.060: done waiting for UI
000.909 000.003: clear screen
000.977 000.006 000.006: require('vim.keymap')
001.391 000.073 000.073: sourcing nvim_exec2()
001.463 000.552 000.474: require('vim._defaults')
001.463 000.002: init default mappings & autocommands
001.642 000.032 000.032: sourcing /usr/share/nvim/runtime/ftplugin.vim
001.665 000.011 000.011: sourcing /usr/share/nvim/runtime/indent.vim
002.341 000.078 000.078: require('packer.util')
002.372 000.606 000.527: require('packer')
002.679 000.101 000.101: require('packer.log')
002.681 000.164 000.063: require('packer.async')
002.796 000.030 000.030: require('packer.result')
002.798 000.116 000.087: require('packer.jobs')
002.801 000.420 000.140: require('packer.plugin_utils')
002.900 000.096 000.096: require('packer.snapshot')
002.907 000.005 000.005: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.911 000.002 000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.913 000.002 000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.916 000.002 000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.918 000.002 000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.920 000.001 000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.922 000.001 000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.924 000.001 000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.926 000.001 000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.927 000.001 000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.930 000.002 000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.964 000.029 000.029: require('nvim-tree')
002.995 000.012 000.012: require('nvim-tree._meta.api.appearance')
003.005 000.010 000.010: require('nvim-tree._meta.api.commands')
003.019 000.014 000.014: require('nvim-tree._meta.api.config')
003.033 000.013 000.013: require('nvim-tree._meta.api.events')
003.050 000.017 000.017: require('nvim-tree._meta.api.filter')
003.071 000.021 000.021: require('nvim-tree._meta.api.fs')
003.080 000.008 000.008: require('nvim-tree._meta.api.git')
003.090 000.010 000.010: require('nvim-tree._meta.api.map')
003.107 000.017 000.017: require('nvim-tree._meta.api.marks')
003.151 000.044 000.044: require('nvim-tree._meta.api.node')
003.188 000.036 000.036: require('nvim-tree._meta.api.tree')
003.240 000.034 000.034: require('nvim-tree.classic')
003.242 000.054 000.020: require('nvim-tree._meta.api.decorator')
003.257 000.014 000.014: require('nvim-tree._meta.api.deprecated')
003.451 000.194 000.194: require('nvim-tree.api.impl')
003.541 000.039 000.039: require('nvim-tree.renderer.decorator')
003.617 000.076 000.076: require('nvim-tree.legacy')
003.618 000.654 000.077: require('nvim-tree.api')
003.719 000.100 000.100: require('nvim-tree.appearance')
004.717 000.003 000.003: require('vim.F')
004.736 000.690 000.687: require('vim.diagnostic')
004.742 000.906 000.216: require('nvim-tree.config')
004.742 001.023 000.117: require('nvim-tree.autocmd')
004.792 000.049 000.049: require('nvim-tree.log')
004.835 000.043 000.043: require('nvim-tree.view-state')
004.911 000.023 000.023: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
004.916 000.003 000.003: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
005.068 003.394 000.329: sourcing /tmp/nd/config/nvim/nd.lua
005.069 000.169: sourcing vimrc file(s)
005.162 000.012 000.012: sourcing /usr/share/nvim/site/ftdetect/ghostty.vim
005.176 000.055 000.043: sourcing nvim_exec2() called at /usr/share/nvim/runtime/filetype.lua:0
005.177 000.090 000.035: sourcing /usr/share/nvim/runtime/filetype.lua
005.253 000.037 000.037: sourcing /usr/share/nvim/runtime/syntax/synload.vim
005.297 000.100 000.064: sourcing /usr/share/nvim/runtime/syntax/syntax.vim
005.530 000.076 000.076: sourcing /usr/share/nvim/runtime/plugin/gzip.vim
005.539 000.004 000.004: sourcing /usr/share/nvim/runtime/plugin/matchit.vim
005.607 000.059 000.059: sourcing /usr/share/nvim/runtime/plugin/matchparen.vim
005.615 000.003 000.003: sourcing /usr/share/nvim/runtime/plugin/netrwPlugin.vim
005.673 000.003 000.003: sourcing /home/alex/.local/share/nvim/rplugin.vim
005.676 000.056 000.054: sourcing /usr/share/nvim/runtime/plugin/rplugin.vim
005.702 000.024 000.024: sourcing /usr/share/nvim/runtime/plugin/shada.vim
005.724 000.005 000.005: sourcing /usr/share/nvim/runtime/plugin/spellfile.vim
005.766 000.037 000.037: sourcing /usr/share/nvim/runtime/plugin/tarPlugin.vim
005.778 000.006 000.006: sourcing /usr/share/nvim/runtime/plugin/tutor.vim
005.833 000.050 000.050: sourcing /usr/share/nvim/runtime/plugin/zipPlugin.vim
005.861 000.022 000.022: sourcing /usr/share/nvim/runtime/plugin/editorconfig.lua
005.895 000.028 000.028: sourcing /usr/share/nvim/runtime/plugin/man.lua
005.929 000.029 000.029: sourcing /usr/share/nvim/runtime/plugin/osc52.lua
005.953 000.016 000.016: sourcing /usr/share/nvim/runtime/plugin/tohtml.lua
005.958 000.281: loading rtp plugins
006.126 000.111 000.111: require('nvim-tree.commands')
006.222 000.212 000.100: sourcing /tmp/nd/local/share/nvim/site/pack/packer/start/nvim-tree.lua.dev/plugin/nvim-tree.lua
006.260 000.013 000.013: sourcing /tmp/nd/local/share/nvim/site/pack/packer/start/nvim-web-devicons/plugin/nvim-web-devicons.vim
006.344 000.064 000.064: sourcing /tmp/nd/local/share/nvim/site/pack/packer/start/packer.nvim/plugin/packer_compiled.lua
006.346 000.100: loading packages
006.347 000.001: loading after plugins
006.353 000.006: inits 3
007.397 001.044: reading ShaDa
007.436 000.039: opening buffers
007.443 000.007: BufEnter autocommands
007.444 000.001: editing files in windows
007.458 000.014: VimEnter autocommands
007.513 000.047 000.047: require('vim.termcap')
007.528 000.009 000.009: require('vim.text')
007.536 000.021: UIEnter autocommands
007.539 000.002: before starting main loop
007.695 000.156: first screen update
007.697 000.002: --- NVIM STARTED ---