icon

nazo6.dev

一覧に戻る
2021/9/4 2023/4/28 4 min read

neovim luaのパフォーマンス計測方法

この記事はZennにも投稿しています

#方法1

最初は下の方法2を使用していましたが、profile.nvimという素晴らしいプラグインが出ていたので今はこれを使用するのがおすすめです。

使い方はプラグインのREADMEに書いてある通りなのですがそれだけでもなんなので自分の使用例を書いておきます。

こちらが自分のprofile.nvimの設定です。 ポイントとしては、パッケージマネージャ(自分の場合はlazy.nvim)がこのプラグインを読み込む前のコードや パッケージマネージャ自体のパフォーマンスを計測したい場合には自身でこのプラグインを使用しなければならないということです。 この設定ではvim.fn.stdpath "config" .. "/profile.nvim"runtimepathに追加して、lazyのsetup前からプラグインを使用できるようにしています。

これで

NVIM_PROFILE=start nvim

のようにneovimを起動し、<F1>キーを押すことでプロファイルのデータを保存できます。

#データの見方

データを見るには、https://ui.perfetto.devを使用します。試しに自分の設定で取ったプロファイルが以下のようになります。 これでどのコードに時間がかかっているのか一目瞭然です。neovimの起動時間を詰めたいときなどに非常に有用な他、 --startuptimeとは違い好きなタイミングでプロファイルを行えるため、プラグイン作成にも使えるんじゃないかなと思います。

#方法2

こっちは方法1を発見する前の内容です。現在でも使えますが方法1のほうが正確な気がします。

plenary.nvim の profilerを使います

plenary.nvim がインストールしてあれば使いかたは簡単で、計測したい範囲を

require'plenary.profile'.start("profile.log")
 
-- code to be profiled
 
require'plenary.profile'.stop()

のように囲むだけです。

これで init.lua であれば~/.config/nvim以下に profile.log ができます。

#グラフにする

が、このログは超絶見づらいので図にしたいです。そこでinfernoという Rust 製ツールを使います。README にごちゃごちゃ書いてますが今回はログをグラフに変換したいだけなので cargo install するだけです。もちろん Rust ツールチェーンがインストールされている必要があります。

cargo install inferno

そしてさっきのプロファイルの開始の行を

require'plenary.profile'.start("profile.log", {flame = true})

に変えます。 そして

inferno-flamegraph profile.log > flame.svg

を実行すると svg で図が出力されます。

試しに自分の init.lua で試してみたのがこちらです。 どのプラグインに時間がかかっているのかが一目瞭然です。設定だけではなくプラグイン開発にも役立ちそうですね。

#jit.vmdef not found とかいうエラーがでた

LuaJIT をインストールします。

git clone https://github.com/LuaJIT/LuaJIT
cd LuaJIT
make

そして環境変数LUA_PATH今インストールしたLuaJITのパス/srcを追加します。 これで動くはずです。

Share this article:
一覧に戻る

関連記事

2021/8/21

2024/3/14

#tech/software/neovim
blog

Neovim builtin LSP設定入門

<div class="message-warning"> Neovim 0.11においてLSP関連の大きな変更があり、この記事の内容は若干古くなっています(古いというだけでこの記事の内容自体は有効であり、コードも動くはずです)。 最新の設定を試したいという方は記事の更新をお待ちください </div>

Read Article

2023/5/1

#tech/software/neovim
blog

Neovimを再起動するコマンドを作ったら結構よかった

Neovim盆栽をしていると設定をリロードしたい時が結構というかかなりあります。Vimscriptであればsource ~/.vimrcとすればまあ大体うまくいっていた気がするのですがLuaではそうもいきません。 Luaのrequireのキャッシュを消してやればもう一度読み込めるとかは言われていますが世の中のLuaプラグインはsetupを2回以上呼んだりするとおかしくなったりする物が大抵なのでこの方法でもあんまりうまくいきません。

Read Article

2021/3/28

2021/10/23

#tech/lang/js-ts#tech/software/neovim
blog

Typescriptでneovimの設定を書く!

vim を使い始めて 2 週間ほどたったある日、せっかく neovim を使っているんだし設定が少ない今のうちに init.vim を init.lua に書き換えようと思いこちらの文章を読んでいたところ、最後にこんなものがあるのに気づきました。

Read Article

2021/3/14

2021/3/15

#tech/software/neovim
memo

Vim初心者がNeovimを試す

VSCodeを使っているとコマンド操作できることでも覚えるのがめんどくさくてついマウスでポチポチしてしまうので自分を律したい

Read Article

2024/1/31

#tech/software/neovim
memo

Windows Terminal上のNeovimでundercurlを表示する(wslのみ)

最近ついにWindows Terminalでもundercurlの表示ができるようになった(これを書いた時点ではプレビュー版のみ)。

Read Article

2023/10/31

#tech/software/neovim
blog

lemonadeでssh先のneovimとクリップボードを共有

lemonadeを使えばTCP通信を用いてクリップボードを共有できます。

Read Article

2021/5/15

2022/5/7

#tech/software/neovim
blog

nvim-lspでtsconfig.jsonとかの補完をする方法(JSON schema)

SchemaStore.nvim というプラグインが出てきました。 基本的にこの記事で説明されていることをやってくれてさらに定期的に更新されるのでこのプラグインを使うのがおすすめです。

Read Article

2023/8/22

#tech/software/neovim
memo

telescope.nvim拡張の作り方

telescope.nvimの拡張(ソース)の作り方のいい文献があまり見つからなかったのでメモ。

Read Article

© 2025 nazo6. All rights reserved.