Open jayli opened 2 years ago
优化前后的对比:
else
let local_menuitems = g:easycomplete_menuitems
18 0.000014 endif
-18 0.599898 0.000676 let filtered_menu = easycomplete#util#CompleteMenuFilter(local_menuitems, word, 250)
+18 0.008779 0.000196 let filtered_menu = easycomplete#util#CompleteMenuFilter(local_menuitems, word, 250)
18 0.000047 if len(filtered_menu) == 0
call s:CloseCompletionMenu()
let g:easycomplete_stunt_menuitems = []
return
18 0.000014 endif
https://github.com/jayli/vim-easycomplete/commit/5846bcd41045bd6f5c178831a27e83fe3a2643c4
nvim 0.5.0及以下版本不支持 fuzzymatch,保留原实现
性能相关issue #20 , #59
体验相关问题,nim 性能极差:
原因1是 uniq() 函数做全量item去重导致的,已经删掉了。原因2是nimlsp每次都是返回全量items,全部交给vimscript去过滤,这里需要提前先过滤一下,其他语言也存在类似的情况。
https://github.com/jayli/vim-easycomplete/issues/155#issuecomment-1041601917
优化完成后,firstcomplete 耗时最久的 easycomplete#util#GetVimCompletionItems() 优化在 0.08s 提速四倍。已经基本不影响跟指动作了。nim 和 vim 的 lsp 返回结果很多,也在进入处理前就做了一轮过滤。
FUNCTIONS SORTED ON SELF TIME
count total (s) self (s) function
- 1 0.261271 0.192055 easycomplete#util#GetVimCompletionItems()
+ 1 0.081271 0.042055 easycomplete#util#GetVimCompletionItems()
2 0.035895 <SNR>107_PreparePythonEnvironment()
1999 0.030477 easycomplete#util#SortTextComparatorByLength()
2 0.024277 0.020418 <SNR>85_NormalizeMenulist()
259 0.013673 <SNR>86_NormalizeLspInfo()
926 0.013502 499()
2 0.047732 0.011837 easycomplete#python#NormalizeSortPY()
69 0.013464 0.009695 easycomplete#context()
1 0.039441 0.008957 easycomplete#util#CompleteMenuFilter()
529 0.007605 easycomplete#util#GetUserData()
1 0.012328 0.006512 easycomplete#util#distinct()
255 0.005268 <SNR>85_CompleteSourceReady()
259 0.005143 easycomplete#util#LspType()
259 0.005816 0.004312 <SNR>86_GetItemWord()
1 0.178874 0.003935 <SNR>96_on_stdout()
1 0.058718 0.003616 <SNR>85_FirstCompleteRendering()
5 0.136756 0.003455 easycomplete#CompleteAdd()
78 0.003403 easycomplete#util#GetTypingWord()
4 0.013038 0.003321 <SNR>85_ResetCompleteTaskQueue()
3 0.014328 0.003267 <SNR>85_flush()
比如 snip 的 completor 逻辑修改成: