Skip to content

perf(#3231): decrease setup time: optimise setup and defer requires until tree open#3308

Open
alex-courtis wants to merge 23 commits intomasterfrom
3253.2
Open

perf(#3231): decrease setup time: optimise setup and defer requires until tree open#3308
alex-courtis wants to merge 23 commits intomasterfrom
3253.2

Conversation

@alex-courtis
Copy link
Copy Markdown
Member

@alex-courtis alex-courtis commented Mar 30, 2026

fixes #3253
fixes #3231

nvim-tree is now completely lazy on startup and requires the minimum when:

  • requiring api / registering events
  • requiring nvim-tree
  • calling setup

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:

require("nvim-tree.api")
paste -sd+ <(grep "require('nvim-tree\." /tmp/startuptime | cut -d ' ' -f 5 | sed -E 's/:$//g') | bc
1.347
log
--- Startup times for process: Primary (or UI client) ---

times in msec
 clock   self+sourced   self:  sourced script
 clock   elapsed:              other lines

000.000  000.000: --- NVIM STARTING ---
000.065  000.064: event init
000.115  000.050: early init
000.130  000.016: locale set
000.150  000.019: init first window
000.357  000.207: inits 1
000.360  000.004: window checked
000.363  000.002: parsing arguments
000.671  000.022  000.022: require('vim.shared')
000.720  000.022  000.022: require('vim.inspect')
000.745  000.020  000.020: require('vim._options')
000.746  000.073  000.031: require('vim._editor')
000.746  000.112  000.017: require('vim._init_packages')
000.747  000.273: init lua interpreter
001.370  000.623: nvim_ui_attach
001.550  000.180: nvim_set_client_info
001.551  000.001: --- NVIM STARTED ---

--- Startup times for process: Embedded ---

times in msec
 clock   self+sourced   self:  sourced script
 clock   elapsed:              other lines

000.000  000.000: --- NVIM STARTING ---
000.062  000.062: event init
000.101  000.039: early init
000.117  000.015: locale set
000.133  000.016: init first window
000.310  000.177: inits 1
000.317  000.008: window checked
000.319  000.002: parsing arguments
000.618  000.024  000.024: require('vim.shared')
000.667  000.021  000.021: require('vim.inspect')
000.692  000.020  000.020: require('vim._options')
000.693  000.073  000.031: require('vim._editor')
000.693  000.116  000.019: require('vim._init_packages')
000.694  000.259: init lua interpreter
000.737  000.043: expanding arguments
000.745  000.008: inits 2
000.890  000.145: init highlight
000.890  000.000: waiting for UI
000.960  000.069: done waiting for UI
000.964  000.004: clear screen
001.030  000.006  000.006: require('vim.keymap')
001.468  000.073  000.073: sourcing nvim_exec2()
001.543  000.578  000.499: require('vim._defaults')
001.544  000.002: init default mappings & autocommands
001.721  000.037  000.037: sourcing /usr/share/nvim/runtime/ftplugin.vim
001.744  000.012  000.012: sourcing /usr/share/nvim/runtime/indent.vim
002.431  000.079  000.079: require('packer.util')
002.446  000.606  000.527: require('packer')
002.743  000.097  000.097: require('packer.log')
002.745  000.157  000.060: require('packer.async')
002.859  000.029  000.029: require('packer.result')
002.861  000.115  000.086: require('packer.jobs')
002.863  000.409  000.137: require('packer.plugin_utils')
002.957  000.090  000.090: require('packer.snapshot')
002.964  000.006  000.006: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.968  000.002  000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.971  000.002  000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.973  000.002  000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.975  000.002  000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.978  000.001  000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.980  000.001  000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.982  000.001  000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.984  000.001  000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.985  000.001  000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.988  000.002  000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
003.026  000.012  000.012: require('nvim-tree._meta.api.appearance')
003.036  000.010  000.010: require('nvim-tree._meta.api.commands')
003.050  000.013  000.013: require('nvim-tree._meta.api.config')
003.064  000.013  000.013: require('nvim-tree._meta.api.events')
003.081  000.017  000.017: require('nvim-tree._meta.api.filter')
003.102  000.021  000.021: require('nvim-tree._meta.api.fs')
003.111  000.008  000.008: require('nvim-tree._meta.api.git')
003.122  000.011  000.011: require('nvim-tree._meta.api.map')
003.137  000.015  000.015: require('nvim-tree._meta.api.marks')
003.188  000.050  000.050: require('nvim-tree._meta.api.node')
003.226  000.037  000.037: require('nvim-tree._meta.api.tree')
003.278  000.035  000.035: require('nvim-tree.classic')
003.282  000.055  000.020: require('nvim-tree._meta.api.decorator')
003.300  000.018  000.018: require('nvim-tree._meta.api.deprecated')
003.493  000.192  000.192: require('nvim-tree.api.impl')
003.557  000.041  000.041: require('nvim-tree.renderer.decorator')
003.630  000.071  000.071: require('nvim-tree.legacy')
003.632  000.640  000.055: require('nvim-tree.api')
003.632  001.880  000.114: sourcing /tmp/nd/config/nvim/nd.lua
003.633  000.161: sourcing vimrc file(s)
003.738  000.014  000.014: sourcing /usr/share/nvim/site/ftdetect/ghostty.vim
003.754  000.066  000.052: sourcing nvim_exec2() called at /usr/share/nvim/runtime/filetype.lua:0
003.755  000.106  000.040: sourcing /usr/share/nvim/runtime/filetype.lua
003.830  000.037  000.037: sourcing /usr/share/nvim/runtime/syntax/synload.vim
003.891  000.117  000.080: sourcing /usr/share/nvim/runtime/syntax/syntax.vim
004.107  000.075  000.075: sourcing /usr/share/nvim/runtime/plugin/gzip.vim
004.116  000.005  000.005: sourcing /usr/share/nvim/runtime/plugin/matchit.vim
004.193  000.072  000.072: sourcing /usr/share/nvim/runtime/plugin/matchparen.vim
004.200  000.003  000.003: sourcing /usr/share/nvim/runtime/plugin/netrwPlugin.vim
004.264  000.010  000.010: sourcing /home/alex/.local/share/nvim/rplugin.vim
004.267  000.061  000.051: sourcing /usr/share/nvim/runtime/plugin/rplugin.vim
004.294  000.024  000.024: sourcing /usr/share/nvim/runtime/plugin/shada.vim
004.306  000.006  000.006: sourcing /usr/share/nvim/runtime/plugin/spellfile.vim
004.349  000.039  000.039: sourcing /usr/share/nvim/runtime/plugin/tarPlugin.vim
004.369  000.007  000.007: sourcing /usr/share/nvim/runtime/plugin/tutor.vim
004.430  000.056  000.056: sourcing /usr/share/nvim/runtime/plugin/zipPlugin.vim
004.473  000.037  000.037: sourcing /usr/share/nvim/runtime/plugin/editorconfig.lua
004.527  000.049  000.049: sourcing /usr/share/nvim/runtime/plugin/man.lua
004.588  000.056  000.056: sourcing /usr/share/nvim/runtime/plugin/osc52.lua
004.617  000.025  000.025: sourcing /usr/share/nvim/runtime/plugin/tohtml.lua
004.621  000.250: loading rtp plugins
004.853  000.177  000.177: require('nvim-tree.commands')
004.923  000.252  000.075: sourcing /tmp/nd/local/share/nvim/site/pack/packer/start/nvim-tree.lua.dev/plugin/nvim-tree.lua
004.964  000.014  000.014: sourcing /tmp/nd/local/share/nvim/site/pack/packer/start/nvim-web-devicons/plugin/nvim-web-devicons.vim
005.048  000.064  000.064: sourcing /tmp/nd/local/share/nvim/site/pack/packer/start/packer.nvim/plugin/packer_compiled.lua
005.051  000.100: loading packages
005.051  000.001: loading after plugins
005.057  000.006: inits 3
006.112  001.055: reading ShaDa
006.149  000.037: opening buffers
006.150  000.000: BufEnter autocommands
006.151  000.001: editing files in windows
006.163  000.012: VimEnter autocommands
006.217  000.047  000.047: require('vim.termcap')
006.232  000.009  000.009: require('vim.text')
006.241  000.023: UIEnter autocommands
006.242  000.001: before starting main loop
006.376  000.134: first screen update
006.377  000.001: --- NVIM STARTED ---
require("nvim-tree")
paste -sd+ <(grep "require('nvim-tree\." /tmp/startuptime | cut -d ' ' -f 5 | sed -E 's/:$//g') | bc
.107
log
--- Startup times for process: Primary (or UI client) ---

times in msec
 clock   self+sourced   self:  sourced script
 clock   elapsed:              other lines

000.000  000.000: --- NVIM STARTING ---
000.065  000.064: event init
000.108  000.044: early init
000.124  000.016: locale set
000.145  000.020: init first window
000.331  000.187: inits 1
000.335  000.003: window checked
000.337  000.002: parsing arguments
000.642  000.023  000.023: require('vim.shared')
000.693  000.022  000.022: require('vim.inspect')
000.736  000.038  000.038: require('vim._options')
000.737  000.093  000.033: require('vim._editor')
000.738  000.136  000.020: require('vim._init_packages')
000.738  000.266: init lua interpreter
001.332  000.594: nvim_ui_attach
001.485  000.153: nvim_set_client_info
001.486  000.001: --- NVIM STARTED ---

--- Startup times for process: Embedded ---

times in msec
 clock   self+sourced   self:  sourced script
 clock   elapsed:              other lines

000.000  000.000: --- NVIM STARTING ---
000.066  000.066: event init
000.117  000.051: early init
000.132  000.016: locale set
000.150  000.018: init first window
000.340  000.191: inits 1
000.348  000.007: window checked
000.350  000.002: parsing arguments
000.651  000.021  000.021: require('vim.shared')
000.698  000.021  000.021: require('vim.inspect')
000.722  000.020  000.020: require('vim._options')
000.723  000.071  000.030: require('vim._editor')
000.724  000.110  000.018: require('vim._init_packages')
000.725  000.265: init lua interpreter
000.760  000.035: expanding arguments
000.770  000.010: inits 2
000.912  000.142: init highlight
000.912  000.000: waiting for UI
000.975  000.063: done waiting for UI
000.978  000.003: clear screen
001.047  000.007  000.007: require('vim.keymap')
001.499  000.097  000.097: sourcing nvim_exec2()
001.571  000.591  000.487: require('vim._defaults')
001.572  000.002: init default mappings & autocommands
001.743  000.031  000.031: sourcing /usr/share/nvim/runtime/ftplugin.vim
001.766  000.011  000.011: sourcing /usr/share/nvim/runtime/indent.vim
002.471  000.093  000.093: require('packer.util')
002.486  000.650  000.557: require('packer')
002.768  000.085  000.085: require('packer.log')
002.769  000.143  000.058: require('packer.async')
002.885  000.031  000.031: require('packer.result')
002.886  000.116  000.085: require('packer.jobs')
002.889  000.394  000.135: require('packer.plugin_utils')
002.978  000.086  000.086: require('packer.snapshot')
002.986  000.006  000.006: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.989  000.002  000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.992  000.002  000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.994  000.002  000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.997  000.002  000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
002.998  000.001  000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
003.000  000.001  000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
003.002  000.001  000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
003.004  000.001  000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
003.006  000.001  000.001: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
003.008  000.002  000.002: sourcing nvim_exec2() called at /tmp/nd/config/nvim/nd.lua:0
003.042  000.029  000.029: require('nvim-tree')
003.043  001.268  000.089: sourcing /tmp/nd/config/nvim/nd.lua
003.044  000.162: sourcing vimrc file(s)
003.131  000.013  000.013: sourcing /usr/share/nvim/site/ftdetect/ghostty.vim
003.145  000.053  000.040: sourcing nvim_exec2() called at /usr/share/nvim/runtime/filetype.lua:0
003.145  000.087  000.034: sourcing /usr/share/nvim/runtime/filetype.lua
003.223  000.036  000.036: sourcing /usr/share/nvim/runtime/syntax/synload.vim
003.283  000.118  000.082: sourcing /usr/share/nvim/runtime/syntax/syntax.vim
003.504  000.075  000.075: sourcing /usr/share/nvim/runtime/plugin/gzip.vim
003.513  000.004  000.004: sourcing /usr/share/nvim/runtime/plugin/matchit.vim
003.584  000.067  000.067: sourcing /usr/share/nvim/runtime/plugin/matchparen.vim
003.591  000.003  000.003: sourcing /usr/share/nvim/runtime/plugin/netrwPlugin.vim
003.647  000.003  000.003: sourcing /home/alex/.local/share/nvim/rplugin.vim
003.650  000.054  000.051: sourcing /usr/share/nvim/runtime/plugin/rplugin.vim
003.677  000.023  000.023: sourcing /usr/share/nvim/runtime/plugin/shada.vim
003.690  000.005  000.005: sourcing /usr/share/nvim/runtime/plugin/spellfile.vim
003.733  000.038  000.038: sourcing /usr/share/nvim/runtime/plugin/tarPlugin.vim
003.745  000.006  000.006: sourcing /usr/share/nvim/runtime/plugin/tutor.vim
003.801  000.051  000.051: sourcing /usr/share/nvim/runtime/plugin/zipPlugin.vim
003.827  000.020  000.020: sourcing /usr/share/nvim/runtime/plugin/editorconfig.lua
003.863  000.031  000.031: sourcing /usr/share/nvim/runtime/plugin/man.lua
003.900  000.030  000.030: sourcing /usr/share/nvim/runtime/plugin/osc52.lua
003.917  000.013  000.013: sourcing /usr/share/nvim/runtime/plugin/tohtml.lua
003.921  000.250: loading rtp plugins
004.082  000.107  000.107: require('nvim-tree.commands')
004.153  000.183  000.076: sourcing /tmp/nd/local/share/nvim/site/pack/packer/start/nvim-tree.lua.dev/plugin/nvim-tree.lua
004.194  000.012  000.012: sourcing /tmp/nd/local/share/nvim/site/pack/packer/start/nvim-web-devicons/plugin/nvim-web-devicons.vim
004.282  000.068  000.068: sourcing /tmp/nd/local/share/nvim/site/pack/packer/start/packer.nvim/plugin/packer_compiled.lua
004.285  000.101: loading packages
004.286  000.001: loading after plugins
004.292  000.006: inits 3
005.332  001.041: reading ShaDa
005.370  000.038: opening buffers
005.371  000.000: BufEnter autocommands
005.372  000.001: editing files in windows
005.385  000.013: VimEnter autocommands
005.440  000.048  000.048: require('vim.termcap')
005.455  000.009  000.009: require('vim.text')
005.463  000.021: UIEnter autocommands
005.465  000.002: before starting main loop
005.591  000.125: first screen update
005.591  000.001: --- NVIM STARTED ---
require("nvim-tree").setup({})
paste -sd+ <(grep "require('nvim-tree\." /tmp/startuptime | cut -d ' ' -f 5 | sed -E 's/:$//g') | bc
1.292
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 ---

Base automatically changed from 3257.5 to master March 31, 2026 01:21
@alex-courtis alex-courtis changed the title perf(#3253): move non-setup functionality out of nvim-tree.lua perf(#3231): decrease setup time: optimise setup and defer requires until tree open Mar 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Performance: Move non-setup functions from nvim-tree.lua to another module Performance: Load Only Necessary Modules On setup and requiring API

1 participant