New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

menu.vimの読み込みを高速化する試み #1111

Closed
k-takata opened this Issue Oct 24, 2017 · 6 comments

Comments

Projects
None yet
2 participants
@k-takata
Member

k-takata commented Oct 24, 2017

質問・報告の内容

現在の menu.vim は、"Color Scheme", "Keymap", "Set Compiler" の各メニュー項目を表示するために、globpath() を使って 'runtimepath' 内の *.vim ファイルを検索しており、そのためロードが遅いという問題があります。

そこで、これらのファイルの検索はスキップし、"Show File Types in Menu" と同様に、手動でメニュー項目を読み込むようにするパッチを作ってみました。
https://bitbucket.org/k_takata/vim-ktakata-mq/src/bf92d701bca2ef46f6caa64aae89438e039370bb/improve-loading-menu.vim.patch?at=default&fileviewer=file-view-default

手元の環境では、ディスクキャッシュが効いた状態で、menu.vim の読み込み時間が 30~50ms 程度だったものが 15~20ms 程度に改善しました。数十ms程度のわずかな改善ですが、ディスクキャッシュが効いていなかったり、バックグラウンドで重い処理が走っていたりする状況では、効果が顕著に現れます。

これに対しBramから遅延ロードするようにできないかという要求があったので、アイドル状態になったら自動でメニュー項目を読み込むようにする追加パッチも作ってみました。
https://bitbucket.org/k_takata/vim-ktakata-mq/src/938cf6a5e03ef2ccbc131ca2a3eb5bae364beb7b/improve-loading-menu.vim-cursorhold.patch?at=default&fileviewer=file-view-default

関連スレッド:
https://groups.google.com/d/msg/vim_use/WinEw4V1GE0/5v9p7gpxAwAJ

Bram も

I like the idea. I'll wait for a few people to try it out.

と言っていますので、何かあればフィードバックをお願いします。

Vimのバージョン

8.0.1216

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Oct 25, 2017

Member

ドキュメントに書いていますが、.vimrclet do_globpath_menus = 1 を書いておけば、今まで通り、起動時にメニュー項目をロードすることもできます。
ただ、実装に globpath() と使っているからと言って、do_globpath_menus という変数名にするのはどうかという感じですが、よい案も思い浮かばず…。

あと、このパッチを適用しても menu.vim のロードに 20ms 程度掛かるのはなぜなのか気になります。Vim scriptの遅さ故に仕方がないのか、まだ無駄なディスクアクセスがあるのか…。

Member

k-takata commented Oct 25, 2017

ドキュメントに書いていますが、.vimrclet do_globpath_menus = 1 を書いておけば、今まで通り、起動時にメニュー項目をロードすることもできます。
ただ、実装に globpath() と使っているからと言って、do_globpath_menus という変数名にするのはどうかという感じですが、よい案も思い浮かばず…。

あと、このパッチを適用しても menu.vim のロードに 20ms 程度掛かるのはなぜなのか気になります。Vim scriptの遅さ故に仕方がないのか、まだ無駄なディスクアクセスがあるのか…。

@h-east

This comment has been minimized.

Show comment
Hide comment
@h-east

h-east Oct 25, 2017

Member

load_menus_on_startup とか?

Member

h-east commented Oct 25, 2017

load_menus_on_startup とか?

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Oct 25, 2017

Member

それだと、今回の部分とは関係なくメニューを読み込むような印象が…。
すでにある同様の変数が do_syntax_sel_menu なので似たような名前がよいかと思っていますが、なかなかいいのが思い浮かばないです。

とりあえずパッチ更新。
https://bitbucket.org/k_takata/vim-ktakata-mq/src/c58b17bb22261436910d77dcda76409edd962ad5/improve-loading-menu.vim.patch?at=default&fileviewer=file-view-default
なんとなく do_lazyload_menus に変えてみましたが、しっくりこない…。

Member

k-takata commented Oct 25, 2017

それだと、今回の部分とは関係なくメニューを読み込むような印象が…。
すでにある同様の変数が do_syntax_sel_menu なので似たような名前がよいかと思っていますが、なかなかいいのが思い浮かばないです。

とりあえずパッチ更新。
https://bitbucket.org/k_takata/vim-ktakata-mq/src/c58b17bb22261436910d77dcda76409edd962ad5/improve-loading-menu.vim.patch?at=default&fileviewer=file-view-default
なんとなく do_lazyload_menus に変えてみましたが、しっくりこない…。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Nov 2, 2017

Member

todo listed.

Patch to skip globpath() for color schemes, keymaps and compiler settings.
So that loading menus is faster. (Ken Takata, 2017 Oct 23)
Update to expand the menus in a CursorHold autocmd. (2017 Oct 25)

Member

k-takata commented Nov 2, 2017

todo listed.

Patch to skip globpath() for color schemes, keymaps and compiler settings.
So that loading menus is faster. (Ken Takata, 2017 Oct 23)
Update to expand the menus in a CursorHold autocmd. (2017 Oct 25)

@k-takata

This comment has been minimized.

Show comment
Hide comment
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment