vim-syntastic / syntastic

Syntax checking hacks for vim
Do What The F*ck You Want To Public License
11.3k stars 1.14k forks source link

Significantly Affecting Vim Startup #1580

Closed hyiltiz closed 8 years ago

hyiltiz commented 8 years ago

Installing syntastic using vim-plug as default (Plug 'scrooloose/syntastic'), I found that syntastic is taking significantly longer to startup and affecting vim startup time compared to other plugins. I would imagine that syntastic would not delay that much since there is actually no file to analyze at that point, and analyzing .vimrc (if that is the case) during startup does not really make sense.

Here is a nice plot for it, and you can see the data for this plot along with original raw data below. (analyzed using https://github.com/hyiltiz/vim-plugins-profile).

result

"ExecTime"  "PluginName"
29.003  "syntastic"
9.536   "vim-airline"
9.256   "vim-easymotion"
8.429   "nerdcommenter"
7.924   "vim-autocorrect"
6.891   "YankRing.vim"
6.43    "delimitMate"
6.121   "wordlist.vim"
6.107   "vim-fugitive"
5.052   "vim-unimpaired"
4.75    "vim-gitgutter"
4.69    "tabular"
4.462   "vim-jsbeautify"
3.75    "emmet-vim"
3.587   "vim-devicons"
2.362   "taglist.vim"
2.245   "unite.vim"
2.174   "gitv"
2.086   "vim-tbone"
1.826   "vim-abolish"
1.635   "matchit.zip"
1.618   "neomru.vim"
1.531   "vim-surround"
1.497   "ctrlp.vim"
1.484   "ultisnips"
1.456   "tagbar"
1.289   "fzf.vim"
1.175   "indentLine"
1.075   "vimshell.vim"
1.064   "vim-endwise"
0.91    "vim-speeddating"
0.795   "vim-easy-align"
0.745   "vim-go"
0.714   "vim-pencil"
0.689   "Vim-R-plugin"
0.685   "myVimPlugins"
0.474   "NrrwRgn"
0.451   "neocomplete.vim"
0.448   "numbers.vim"
0.332   "vim-wordy"
0.308   "tabpagebuffer.vim"
0.292   "csv.vim"
0.286   "vim-hugefile"
0.242   "vim-lexical"
0.203   "vimproc.vim"
0.172   "vim-quickrun"
0.17    "ag.vim"
0.142   "vim-markdown"
0.14    "vim-misc"
0.131   "limelight.vim"
0.129   "vim-diff-enhanced"
0.088   "goyo.vim"
0.08    "gundo.vim"
0.079   "gist-vim"
0.076   "vim-github-dashboard"
0.068   "vim-orgmode"
0.066   "vim-snippets"
times in msec
 clock   self+sourced   self:  sourced script
 clock   elapsed:              other lines

000.022  000.022: --- VIM STARTING ---
000.101  000.079: Allocated generic buffers
000.433  000.332: locale set
000.456  000.023: GUI prepared
000.459  000.003: clipboard setup
000.466  000.007: window checked
001.156  000.690: inits 1
001.171  000.015: parsing arguments
008.569  007.398: expanding arguments
011.954  003.385: shell init
012.235  000.281: Termcap init
012.275  000.040: inits 2
014.511  002.236: init highlight
015.235  000.174  000.174: sourcing $VIM/vimrc
017.762  000.422  000.422: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/syntax/syncolor.vim
017.913  001.087  000.665: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/syntax/synload.vim
037.586  019.236  019.236: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/filetype.vim
037.640  021.377  001.054: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/syntax/syntax.vim
037.732  000.013  000.013: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/filetype.vim
038.312  000.082  000.082: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/ftplugin.vim
038.946  000.102  000.102: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/indent.vim
053.595  013.627  013.627: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/ftplugin/man.vim
056.672  002.574  002.574: sourcing /Users/user/.vim/autoload/plug.vim
069.372  001.781  001.781: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/ftoff.vim
095.228  000.142  000.142: sourcing /Users/user/.vim/plugged/vim-markdown/ftdetect/markdown.vim
095.829  000.073  000.073: sourcing /Users/user/.vim/plugged/ultisnips/ftdetect/snippets.vim
096.224  000.082  000.082: sourcing /Users/user/.vim/plugged/ultisnips/ftdetect/UltiSnips.vim
096.978  000.146  000.146: sourcing /Users/user/.vim/plugged/csv.vim/ftdetect/csv.vim
097.572  000.133  000.133: sourcing /Users/user/.vim/plugged/vim-go/ftdetect/gofiletype.vim
098.715  000.689  000.689: sourcing /Users/user/.vim/plugged/Vim-R-plugin/ftdetect/r.vim
099.557  000.068  000.068: sourcing /Users/user/.vim/plugged/vim-orgmode/ftdetect/org.vim
100.082  000.053  000.053: sourcing /Users/user/.vim/plugged/myVimPlugins/ftdetect/gitary.vim
100.336  025.670  024.284: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/filetype.vim
100.836  000.018  000.018: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/ftplugin.vim
101.366  000.019  000.019: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/indent.vim
102.805  000.307  000.307: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/syntax/nosyntax.vim
104.345  000.365  000.365: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/syntax/syncolor.vim
104.510  001.127  000.762: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/syntax/synload.vim
104.548  003.069  001.635: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/syntax/syntax.vim
107.996  000.741  000.741: sourcing /Users/user/.vim/plugged/unite.vim/autoload/unite/custom.vim
108.840  093.534  024.461: sourcing $HOME/.vimrc
108.848  000.629: sourcing vimrc file(s)
110.778  000.303  000.303: sourcing /Users/user/.vim/plugged/ctrlp.vim/autoload/ctrlp/mrufiles.vim
110.981  001.151  000.848: sourcing /Users/user/.vim/plugged/ctrlp.vim/plugin/ctrlp.vim
113.166  000.575  000.575: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline.vim
114.085  000.403  000.403: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/init.vim
114.919  000.144  000.144: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/parts.vim
115.685  003.680  002.558: sourcing /Users/user/.vim/plugged/vim-airline/plugin/airline.vim
117.015  000.170  000.170: sourcing /Users/user/.vim/plugged/ag.vim/plugin/ag.vim
117.947  000.286  000.286: sourcing /Users/user/.vim/plugged/vim-hugefile/plugin/hugefile.vim
118.544  000.080  000.080: sourcing /Users/user/.vim/plugged/gundo.vim/plugin/gundo.vim
128.670  009.256  009.256: sourcing /Users/user/.vim/plugged/vim-easymotion/plugin/EasyMotion.vim
129.820  000.172  000.172: sourcing /Users/user/.vim/plugged/vim-quickrun/plugin/quickrun.vim
130.943  000.635  000.635: sourcing /Users/user/.vim/plugged/tabular/plugin/Tabular.vim
132.334  000.122  000.122: sourcing /Users/user/.vim/plugged/ultisnips/autoload/UltiSnips/map_keys.vim
132.473  001.043  000.921: sourcing /Users/user/.vim/plugged/ultisnips/plugin/UltiSnips.vim
133.014  000.066  000.066: sourcing /Users/user/.vim/plugged/vim-snippets/plugin/vimsnippets.vim
139.944  006.107  006.107: sourcing /Users/user/.vim/plugged/vim-fugitive/plugin/fugitive.vim
142.785  002.174  002.174: sourcing /Users/user/.vim/plugged/gitv/plugin/gitv.vim
143.332  000.079  000.079: sourcing /Users/user/.vim/plugged/gist-vim/plugin/gist.vim
143.946  000.076  000.076: sourcing /Users/user/.vim/plugged/vim-github-dashboard/plugin/github_dashboard.vim
146.102  000.493  000.493: sourcing /Users/user/.vim/plugged/vim-gitgutter/autoload/gitgutter/highlight.vim
147.576  003.080  002.587: sourcing /Users/user/.vim/plugged/vim-gitgutter/plugin/gitgutter.vim
152.066  003.587  003.587: sourcing /Users/user/.vim/plugged/vim-devicons/plugin/webdevicons.vim
159.526  006.891  006.891: sourcing /Users/user/.vim/plugged/YankRing.vim/plugin/yankring.vim
160.587  000.448  000.448: sourcing /Users/user/.vim/plugged/numbers.vim/plugin/numbers.vim
164.005  001.321  001.321: sourcing /Users/user/.vim/plugged/delimitMate/autoload/delimitMate.vim
167.534  006.430  005.109: sourcing /Users/user/.vim/plugged/delimitMate/plugin/delimitMate.vim
168.431  000.474  000.474: sourcing /Users/user/.vim/plugged/NrrwRgn/plugin/NrrwRgn.vim
169.130  000.129  000.129: sourcing /Users/user/.vim/plugged/vim-diff-enhanced/plugin/EnhancedDiff.vim
169.747  000.146  000.146: sourcing /Users/user/.vim/plugged/csv.vim/plugin/csv.vim
172.594  001.635  001.635: sourcing /Users/user/.vim/plugged/matchit.zip/plugin/matchit.vim
173.754  000.612  000.612: sourcing /Users/user/.vim/plugged/vim-go/plugin/go.vim
184.287  004.462  004.462: sourcing /Users/user/.vim/plugged/vim-jsbeautify/plugin/beautifier.vim
188.625  003.750  003.750: sourcing /Users/user/.vim/plugged/emmet-vim/plugin/emmet.vim
189.877  000.203  000.203: sourcing /Users/user/.vim/plugged/vimproc.vim/plugin/vimproc.vim
191.045  000.308  000.308: sourcing /Users/user/.vim/plugged/tabpagebuffer.vim/plugin/buffer.vim
191.842  000.090  000.090: sourcing /Users/user/.vim/plugged/neocomplete.vim/plugin/neocomplete/buffer.vim
192.243  000.087  000.087: sourcing /Users/user/.vim/plugged/neocomplete.vim/plugin/neocomplete/dictionary.vim
192.674  000.085  000.085: sourcing /Users/user/.vim/plugged/neocomplete.vim/plugin/neocomplete/tag.vim
193.174  000.189  000.189: sourcing /Users/user/.vim/plugged/neocomplete.vim/plugin/neocomplete.vim
194.756  001.075  001.075: sourcing /Users/user/.vim/plugged/vimshell.vim/plugin/vimshell.vim
195.806  000.290  000.290: sourcing /Users/user/.vim/plugged/unite.vim/plugin/unite/bookmark.vim
196.702  000.388  000.388: sourcing /Users/user/.vim/plugged/unite.vim/plugin/unite/buffer.vim
197.281  000.160  000.160: sourcing /Users/user/.vim/plugged/unite.vim/plugin/unite/window.vim
198.293  000.666  000.666: sourcing /Users/user/.vim/plugged/unite.vim/plugin/unite.vim
199.005  000.195  000.195: sourcing /Users/user/.vim/plugged/neomru.vim/plugin/neomru.vim
207.979  008.429  008.429: sourcing /Users/user/.vim/plugged/nerdcommenter/plugin/NERD_commenter.vim
209.267  000.059  000.059: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/autoloclist.vim
209.714  000.056  000.056: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/balloons.vim
210.122  000.055  000.055: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/checker.vim
210.472  000.043  000.043: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/cursor.vim
210.862  000.054  000.054: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/highlighting.vim
211.102  000.056  000.056: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/loclist.vim
211.530  000.052  000.052: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/modemap.vim
211.980  000.071  000.071: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/notifiers.vim
212.241  000.052  000.052: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/registry.vim
212.610  000.064  000.064: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/signs.vim
215.262  001.336  001.336: sourcing /Users/user/.vim/plugged/syntastic/autoload/syntastic/util.vim
230.604  000.141  000.141: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/autoloclist.vim
230.765  000.123  000.123: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/balloons.vim
231.719  000.921  000.921: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/checker.vim
231.974  000.190  000.190: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/cursor.vim
232.169  000.160  000.160: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/highlighting.vim
233.482  001.278  001.278: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/loclist.vim
233.723  000.196  000.196: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/modemap.vim
233.881  000.124  000.124: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/notifiers.vim
235.087  001.172  001.172: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/registry.vim
235.602  000.474  000.474: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic/signs.vim
240.467  027.534  021.419: sourcing /Users/user/.vim/plugged/syntastic/plugin/syntastic.vim
241.194  000.140  000.140: sourcing /Users/user/.vim/plugged/vim-misc/plugin/xolox/misc.vim
243.080  001.456  001.456: sourcing /Users/user/.vim/plugged/tagbar/plugin/tagbar.vim
246.075  002.362  002.362: sourcing /Users/user/.vim/plugged/taglist.vim/plugin/taglist.vim
247.724  001.064  001.064: sourcing /Users/user/.vim/plugged/vim-endwise/plugin/endwise.vim
249.756  001.531  001.531: sourcing /Users/user/.vim/plugged/vim-surround/plugin/surround.vim
251.188  000.910  000.910: sourcing /Users/user/.vim/plugged/vim-speeddating/plugin/speeddating.vim
256.787  005.052  005.052: sourcing /Users/user/.vim/plugged/vim-unimpaired/plugin/unimpaired.vim
259.480  002.086  002.086: sourcing /Users/user/.vim/plugged/vim-tbone/plugin/tbone.vim
261.851  001.826  001.826: sourcing /Users/user/.vim/plugged/vim-abolish/plugin/abolish.vim
270.377  007.924  007.924: sourcing /Users/user/.vim/plugged/vim-autocorrect/plugin/autocorrect.vim
272.510  001.537  001.537: sourcing /Users/user/.fzf/plugin/fzf.vim
274.345  001.289  001.289: sourcing /Users/user/.vim/plugged/fzf.vim/plugin/fzf.vim
275.717  000.795  000.795: sourcing /Users/user/.vim/plugged/vim-easy-align/plugin/easy_align.vim
276.351  000.088  000.088: sourcing /Users/user/.vim/plugged/goyo.vim/plugin/goyo.vim
276.960  000.131  000.131: sourcing /Users/user/.vim/plugged/limelight.vim/plugin/limelight.vim
277.701  000.242  000.242: sourcing /Users/user/.vim/plugged/vim-lexical/plugin/lexical.vim
278.501  000.332  000.332: sourcing /Users/user/.vim/plugged/vim-wordy/plugin/wordy.vim
279.700  000.714  000.714: sourcing /Users/user/.vim/plugged/vim-pencil/plugin/pencil.vim
285.969  006.121  006.121: sourcing /Users/user/.vim/plugged/wordlist.vim/plugin/wordlist.vim
287.163  000.632  000.632: sourcing /Users/user/.vim/plugged/myVimPlugins/plugin/setcolors.vim
288.545  000.160  000.160: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/plugin/getscriptPlugin.vim
289.388  000.463  000.463: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/plugin/gzip.vim
290.335  000.725  000.725: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/plugin/logiPat.vim
291.010  000.458  000.458: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/plugin/matchparen.vim
292.302  001.069  001.069: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/plugin/netrwPlugin.vim
292.696  000.099  000.099: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/plugin/rrhelper.vim
293.027  000.072  000.072: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/plugin/spellfile.vim
293.505  000.254  000.254: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/plugin/tarPlugin.vim
294.079  000.319  000.319: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/plugin/tohtml.vim
294.511  000.239  000.239: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/plugin/vimballPlugin.vim
294.995  000.314  000.314: sourcing /usr/local/Cellar/macvim/7.4-77/MacVim.app/Contents/Resources/vim/runtime/plugin/zipPlugin.vim
297.124  000.839  000.839: sourcing /Users/user/.vim/plugged/tabular/autoload/tabular.vim
299.642  004.055  003.216: sourcing /Users/user/.vim/plugged/tabular/after/plugin/TabularMaps.vim
300.534  000.286  000.286: sourcing /Users/user/.vim/plugged/ultisnips/after/plugin/UltiSnips_after.vim
302.450  001.175  001.175: sourcing /Users/user/.vim/plugged/indentLine/after/plugin/indentLine.vim
302.524  050.876: loading plugins
302.535  000.011: inits 3
305.908  003.373: reading viminfo
305.959  000.051: setting raw mode
305.971  000.012: start termcap
306.071  000.100: clearing screen
307.512  000.763  000.763: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions.vim
308.420  000.132  000.132: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions/quickfix.vim
308.988  000.107  000.107: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions/unite.vim
309.523  000.108  000.108: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions/netrw.vim
310.143  000.216  000.216: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions/ctrlp.vim
311.708  000.254  000.254: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions/hunks.vim
312.356  000.146  000.146: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions/tagbar.vim
313.032  000.116  000.116: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions/csv.vim
313.705  000.229  000.229: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions/branch.vim
314.461  000.106  000.106: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions/syntastic.vim
315.575  000.221  000.221: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions/whitespace.vim
316.295  000.120  000.120: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions/wordcount.vim
316.966  000.191  000.191: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions/nrrwrgn.vim
321.394  000.315  000.315: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/section.vim
323.100  000.781  000.781: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/highlighter.vim
328.209  000.146  000.146: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/themes.vim
328.819  001.274  001.128: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/themes/dark.vim
335.532  000.223  000.223: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/util.vim
337.255  000.338  000.338: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/builder.vim
338.690  000.216  000.216: sourcing /Users/user/.vim/plugged/vim-airline/autoload/airline/extensions/default.vim
357.768  045.841: opening buffers
359.202  000.713  000.713: sourcing /Users/user/.vim/plugged/vim-gitgutter/autoload/gitgutter.vim
360.657  000.744  000.744: sourcing /Users/user/.vim/plugged/vim-gitgutter/autoload/gitgutter/utility.vim
361.522  000.213  000.213: sourcing /Users/user/.vim/plugged/vim-gitgutter/autoload/gitgutter/hunk.vim
368.126  000.907  000.907: sourcing /Users/user/.vim/plugged/syntastic/autoload/syntastic/log.vim
369.307  008.962: BufEnter autocommands
369.316  000.009: editing files in windows
378.471  000.346  000.346: sourcing /Users/user/.vim/plugged/ctrlp.vim/autoload/ctrlp/utils.vim
381.966  001.423  001.423: sourcing /Users/user/.vim/plugged/neomru.vim/autoload/neomru.vim
lcd047 commented 8 years ago

Syntastic is a "heavy" plugin. It isn't optimised for quick startup. For historic reasons, full initialisation happens at Vim startup, rather than at the first use. From your data (which is very similar to what I get on my machine), syntastic takes 29 ms to load. You know what takes 46 ms? Opening buffers:

357.768  045.841: opening buffers

Significantly reducing startup time, either by moving as much of the core as possible to autoload, or by optimising the startup sequence, would be possible, but difficult. I'd venture to guess most people won't really care about reducing those 29 ms to, say, a third of that. But, if you want to do it, enable profiling, and post a PR when you have everything working.