skorokithakis / pastery.vim

A Vim plugin for the sweetest pastebin in the world, pastery.net.
https://www.pastery.net/
9 stars 5 forks source link

Load time #2

Closed meribold closed 7 years ago

meribold commented 8 years ago

pastery.vim takes almost 500 milliseconds to load on my system. That's about half of Vim's total startup time.

Here's the output I get when starting vim with --startuptime:

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

000.018  000.018: --- VIM STARTING ---
000.269  000.251: Allocated generic buffers
000.517  000.248: locale set
000.568  000.051: GUI prepared
000.580  000.012: clipboard setup
000.595  000.015: window checked
001.768  001.173: inits 1
001.788  000.020: parsing arguments
001.790  000.002: expanding arguments
001.829  000.039: shell init
002.551  000.722: Termcap init
002.677  000.126: inits 2
003.022  000.345: init highlight
003.742  000.450  000.450: sourcing /usr/share/vim/vimfiles/archlinux.vim
003.818  000.653  000.203: sourcing /etc/vimrc
009.041  004.485  004.485: sourcing /home/casi/.vim/autoload/plug.vim
030.661  000.087  000.087: sourcing /usr/share/vim/vim74/ftoff.vim
124.534  000.521  000.521: sourcing /home/casi/.vim/plugged/ultisnips/ftdetect/UltiSnips.vim
124.953  000.325  000.325: sourcing /home/casi/.vim/plugged/ultisnips/ftdetect/snippets.vim
126.152  000.514  000.514: sourcing /usr/share/vim/vimfiles/ftdetect/conkyrc.vim
127.768  001.505  001.505: sourcing /usr/share/vim/vimfiles/ftdetect/systemd.vim
128.184  000.285  000.285: sourcing /usr/share/vim/vimfiles/ftdetect/udev.vim
128.789  087.367  084.217: sourcing /usr/share/vim/vim74/filetype.vim
129.687  000.144  000.144: sourcing /usr/share/vim/vim74/ftplugin.vim
130.443  000.099  000.099: sourcing /usr/share/vim/vim74/indent.vim
132.955  000.732  000.732: sourcing /usr/share/vim/vim74/syntax/syncolor.vim
133.306  001.897  001.165: sourcing /usr/share/vim/vim74/syntax/synload.vim
133.406  002.819  000.922: sourcing /usr/share/vim/vim74/syntax/syntax.vim
136.902  001.659  001.659: sourcing /usr/share/vim/vim74/pack/dist/opt/matchit/plugin/matchit.vim
137.032  002.240  000.581: sourcing /usr/share/vim/vim74/macros/matchit.vim
139.528  000.616  000.616: sourcing /usr/share/vim/vim74/syntax/syncolor.vim
142.910  000.632  000.632: sourcing /usr/share/vim/vim74/syntax/syncolor.vim
144.997  000.707  000.707: sourcing /usr/share/vim/vim74/syntax/syncolor.vim
146.729  000.595  000.595: sourcing /usr/share/vim/vim74/syntax/syncolor.vim
242.837  102.093  100.159: sourcing /home/casi/.vim/plugged/jellybeans.vim/colors/jellybeans.vim
245.766  241.409  041.459: sourcing /home/casi/.vim/common.vim
246.155  242.225  000.816: sourcing ~/.vim/vimrc
246.165  000.265: sourcing vimrc file(s)
247.061  000.556  000.556: sourcing /home/casi/.vim/plugged/neomake/plugin/neomake.vim
247.847  000.555  000.555: sourcing /home/casi/.vim/plugged/vim-dispatch/plugin/dispatch.vim
248.354  000.291  000.291: sourcing /home/casi/.vim/plugged/vim-bbye/plugin/bbye.vim
249.117  000.600  000.600: sourcing /home/casi/.vim/plugged/visual-split.vim/plugin/visual-split.vim
250.079  000.804  000.804: sourcing /home/casi/.vim/plugged/vim-indent-object/plugin/indent-object.vim
251.912  001.674  001.674: sourcing /home/casi/.vim/plugged/vim-exchange/plugin/exchange.vim
254.731  002.592  002.592: sourcing /home/casi/.vim/plugged/vim-abolish/plugin/abolish.vim
256.647  001.661  001.661: sourcing /home/casi/.vim/plugged/vim-surround/plugin/surround.vim
257.277  000.377  000.377: sourcing /home/casi/.vim/plugged/vim-line/plugin/line.vim
304.333  046.883  046.883: sourcing /home/casi/.vim/plugged/targets.vim/plugin/targets.vim
306.676  001.609  001.609: sourcing /home/casi/.vim/plugged/vim-textobj-user/autoload/textobj/user.vim
322.391  017.667  016.058: sourcing /home/casi/.vim/plugged/vim-textobj-entire/plugin/textobj/entire.vim
323.518  000.480  000.480: sourcing /home/casi/.vim/plugged/vim-operator-user/autoload/operator/user.vim
324.818  002.119  001.639: sourcing /home/casi/.vim/plugged/vim-clang-format/plugin/clang_format.vim
326.239  001.158  001.158: sourcing /home/casi/.vim/plugged/vim-commentary/plugin/commentary.vim
327.430  000.996  000.996: sourcing /home/casi/.vim/plugged/clever-f.vim/plugin/clever-f.vim
332.034  004.386  004.386: sourcing /home/casi/.vim/plugged/vim-table-mode/plugin/table-mode.vim
332.914  000.570  000.570: sourcing /home/casi/.vim/plugged/lightline.vim/plugin/lightline.vim
335.106  001.875  001.875: sourcing /home/casi/.vim/plugged/vim-eunuch/plugin/eunuch.vim
350.509  015.108  015.108: sourcing /home/casi/.vim/plugged/vim-fugitive/plugin/fugitive.vim
354.343  001.312  001.312: sourcing /home/casi/.vim/plugged/delimitMate/autoload/delimitMate.vim
365.287  014.467  013.155: sourcing /home/casi/.vim/plugged/delimitMate/plugin/delimitMate.vim
367.272  001.670  001.670: sourcing /home/casi/.vim/plugged/vim-endwise/plugin/endwise.vim
379.954  012.368  012.368: sourcing /home/casi/.vim/plugged/vim-unimpaired/plugin/unimpaired.vim
384.572  004.279  004.279: sourcing /home/casi/.vim/plugged/a.vim/plugin/a.vim
385.511  000.673  000.673: sourcing /home/casi/.vim/plugged/vim-man/plugin/man.vim
812.785  427.031  427.031: sourcing /home/casi/.vim/plugged/pastery.vim/plugin/pastery.vim
837.770  024.576  024.576: sourcing /home/casi/.vim/plugged/vim-online-thesaurus/plugin/online-thesaurus.vim
839.031  000.814  000.814: sourcing /home/casi/.vim/plugged/vim-dict/plugin/dict.vim
840.398  001.059  001.059: sourcing /home/casi/.vim/plugged/vim-obsession/plugin/obsession.vim
841.982  001.199  001.199: sourcing /home/casi/.vim/plugged/vim-sleuth/plugin/sleuth.vim
844.953  000.349  000.349: sourcing /home/casi/.vim/plugged/ultisnips/autoload/UltiSnips/map_keys.vim
845.546  003.152  002.803: sourcing /home/casi/.vim/plugged/ultisnips/plugin/UltiSnips.vim
846.785  001.004  001.004: sourcing /home/casi/.vim/plugged/vim-dirvish/plugin/dirvish.vim
848.548  001.491  001.491: sourcing /home/casi/.vim/plugged/vim-visualstar/plugin/visualstar.vim
851.201  001.241  001.241: sourcing /home/casi/.vim/plugged/unite.vim/autoload/unite/custom.vim
851.612  002.597  001.356: sourcing /home/casi/.vim/plugged/unite.vim/plugin/unite/bookmark.vim
852.293  000.616  000.616: sourcing /home/casi/.vim/plugged/unite.vim/plugin/unite/buffer.vim
852.857  000.473  000.473: sourcing /home/casi/.vim/plugged/unite.vim/plugin/unite/window.vim
853.805  000.869  000.869: sourcing /home/casi/.vim/plugged/unite.vim/plugin/unite.vim
855.970  001.945  001.945: sourcing /home/casi/.fzf/plugin/fzf.vim
861.379  005.170  005.170: sourcing /home/casi/.vim/plugged/fzf.vim/plugin/fzf.vim
863.414  001.406  001.406: sourcing /home/casi/.vim/plugged/vim-husk/plugin/husk.vim
866.513  002.851  002.851: sourcing /home/casi/.vim/plugged/vim-speeddating/plugin/speeddating.vim
867.900  001.113  001.113: sourcing /home/casi/.vim/plugged/vim-pencil/plugin/pencil.vim
873.247  004.749  004.749: sourcing /usr/share/vim/vimfiles/plugin/notmuch.vim
874.451  000.470  000.470: sourcing /usr/share/vim/vim74/plugin/getscriptPlugin.vim
875.589  001.078  001.078: sourcing /usr/share/vim/vim74/plugin/gzip.vim
876.604  000.907  000.907: sourcing /usr/share/vim/vim74/plugin/logiPat.vim
877.303  000.637  000.637: sourcing /usr/share/vim/vim74/plugin/matchparen.vim
880.372  003.012  003.012: sourcing /usr/share/vim/vim74/plugin/netrwPlugin.vim
880.725  000.156  000.156: sourcing /usr/share/vim/vim74/plugin/rrhelper.vim
880.979  000.192  000.192: sourcing /usr/share/vim/vim74/plugin/spellfile.vim
881.988  000.927  000.927: sourcing /usr/share/vim/vim74/plugin/tarPlugin.vim
882.463  000.348  000.348: sourcing /usr/share/vim/vim74/plugin/tohtml.vim
883.454  000.930  000.930: sourcing /usr/share/vim/vim74/plugin/vimballPlugin.vim
884.804  001.176  001.176: sourcing /usr/share/vim/vim74/plugin/zipPlugin.vim
885.274  000.088  000.088: sourcing /usr/share/vim/vim74/pack/dist/opt/matchit/plugin/matchit.vim
886.194  000.695  000.695: sourcing /home/casi/.vim/plugged/ultisnips/after/plugin/UltiSnips_after.vim
886.657  000.181  000.181: sourcing /home/casi/.vim/after/plugin/a.vim
886.810  000.064  000.064: sourcing /home/casi/.vim/after/plugin/lightline.vim
886.821  014.351: loading plugins
887.069  000.248: loading packages
887.193  000.124: inits 3
887.892  000.699: reading viminfo
897.053  009.161: setup clipboard
897.095  000.042: setting raw mode
897.156  000.061: start termcap
897.249  000.093: clearing screen
902.503  003.009  003.009: sourcing /home/casi/.vim/plugged/lightline.vim/autoload/lightline.vim
905.172  000.462  000.462: sourcing /home/casi/.vim/plugged/lightline.vim/autoload/lightline/tab.vim
907.968  001.063  001.063: sourcing /home/casi/.vim/plugged/lightline.vim/autoload/lightline/colorscheme.vim
910.553  004.409  003.346: sourcing /home/casi/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/jellybeans.vim
922.823  017.694: opening buffers
937.407  014.584: BufEnter autocommands
937.417  000.010: editing files in windows
942.169  004.752: VimEnter autocommands
942.189  000.020: before starting main loop
944.957  002.471  002.471: sourcing /home/casi/.vim/plugged/neomake/autoload/neomake.vim
946.717  001.562  001.562: sourcing /home/casi/.vim/plugged/neomake/autoload/neomake/signs.vim
950.211  003.989: first screen update
950.221  000.010: --- VIM STARTED ---
skorokithakis commented 7 years ago

Jeez, I can't believe I wasn't notified for this. Thanks for the issue, my vim is slow as well, I would hate it if this plugin was the reason. Will investigate.

skorokithakis commented 7 years ago

Can you post your configuration? Mine takes 50 ms (it shouldn't really be doing anything on startup other than load a few Python packages).

meribold commented 7 years ago

I still have the same issue with a minimal vimrc:

call plug#begin('~/.vim/plugged')
Plug 'skorokithakis/pastery.vim'
call plug#end()

Output from vim -u pastery-only-vimrc --startuptime vim-startuptime.txt:

...
102.477  000.129: sourcing vimrc file(s)
492.817  390.071  390.071: sourcing /home/casi/.vim/plugged/pastery.vim/plugin/pastery.vim
506.249  013.073  013.073: sourcing /usr/share/vim/vimfiles/plugin/notmuch.vim
...

In my actual configuration I work around the problem with on-demand loading:

Plug 'skorokithakis/pastery.vim', { 'on': ['PasteCode', 'PasteFile'] }
skorokithakis commented 7 years ago

Hmm, could it be an issue with the way Plug loads things? Mine is quite a bit faster, I can't reproduce the problem :/

030.911  000.088: sourcing vimrc file(s)
114.063  083.046  083.046: sourcing /home/stavros/.vim/bundle/pastery.vim/plugin/pastery.vim
meribold commented 7 years ago

I'm on a pretty slow laptop (AMD E-450: 1650 MHz dual-core) which might explain the difference.

80 ms is still longer than most Vim plugins take, though. Maybe this can be solved with autoloading?

skorokithakis commented 7 years ago

Does it help if you move the imports inside the PasteryPaste function, like so?

def PasteryPaste(start=None, end=None, title=""):
    import vim
    import json
    import webbrowser

    try:
        from urllib.request import urlopen, Request, build_opener
        from urllib.parse import quote_plus
    except ImportError:
        from urllib2 import urlopen, Request, build_opener
        from urllib import quote_plus

    if start is None:
        start = 1
    if end is None:
        end = len(vim.current.buffer)

    api_key = vim.eval("g:pastery_apikey")
    open_in_browser = to_bool(vim.eval("g:pastery_open_in_browser"))
skorokithakis commented 7 years ago

2159cb3e3867faa2abaef1514cfa68851895aed3 should have fixed this, I now get load times of less than one ms. Please reopen if that's not the case (but do tell me if this did fix it).

meribold commented 7 years ago

I get 140 ms now (on my laptop). I'll measure it on my desktop as well later.