Shougo / context_filetype.vim

Context filetype library for Vim script
Other
160 stars 20 forks source link

context_filetype のパフォーマンスに関して #6

Closed osyo-manga closed 11 years ago

osyo-manga commented 11 years ago

1 から派生。

巨大なファイルの場合だと重いという事で実際の処理速度を測ってみました。


実測のチェック関数

function! s:context_filetype(num)
    let start_time = reltime()

    for i in range(a:num)
        call context_filetype#get()
    endfor

    return str2float(reltimestr(reltime(start_time))) / a:num
endfunction

function! Check()
    let num = 10

    " context_filetype#get() の1回辺りの処理時間を計測
    echo s:context_filetype(num)
endfunction


対象のファイル

適当なファイルが無かったので eval.txt(約8000行)をバッファにコピーし、行頭python << HOGEHOGE、行末にHOGEHOGEを追加して、set filetype=vim として試してみました。


実行速度

以下の各行でcall Check()した結果です。 また、stopline と timeout は使用していない状態です。

また、コンテキストがネストしているとその分だけ searchpos を処理する回数が増えるので更に時間がかかると思います。


原因


対応策

個人的には stopline の閾値だけがユーザ側で設定出来れば十分だと思います。


その他

試しに下記のように autocmd CursorMoved で処理するようにしてみました。 これを↑のファイルで動作させてみたんですが個人的にはあまり重いとは感じないレベルでした。

augroup test-context_filetype
    autocmd!
    autocmd CursorMoved,CursorMovedI * echo context_filetype#get()
augroup END
osyo-manga commented 11 years ago

ひとまず g:context_filetype#search_offsetで閾値を設定できるようにしてみました。

Shougo commented 11 years ago

はい。それで問題ないと思います。

osyo-manga commented 11 years ago

了解です。 s:timeout の方は削除しておきます。

osyo-manga commented 11 years ago

修正ed。