Commit Graph

14 Commits

Author SHA1 Message Date
yioneko
1a1d7ecb73 perf: improve for source providing huge list of items (#1980)
* perf: avoid creating closure in cache.ensure and drop some cached getters

This mainly addresses the perf issue on large amount of calls to
`entry.new`. Previously every `cache.ensure` calls in the code path of
it creates an anonymous function, and it seems that luajit just could
not inline it. Function creation is not expensive in luajit, but that
overhead is noticeable if every `cache.ensure` call creates a function.
The first improvemnt is to solidate the cache callback and attach it to
the metatable of `entry`. This ensures that every created entry instance
share the same cache callback and no new functions will be frequently created,
reduces the ram usage and GC overhead.

To improve it further, some frequently accessed fields of entry like
`completion_item` and `offset` is refactored to use simple table access
instead of getter pattern. The current cached getter is implemented
using `cache.ensure`, which introduces two more levels of function calls
on each access: `cache.key` and `cache.get`. The overhead is okay if but
noticeable if entries amount is quite large: you need to call 4 functions on
a simple `completion_item` field access for each item.

All of the changes done in the commit is just constant time
optimization. But the different is huge if tested with LS providing
large amount of entries like tailwindcss.

* perf: delay fuzzy match on displayed vim item

`entry.get_vim_item` is a very heavy call, especially when user do
complex stuff on item formatting. Delay its call to window displaying to
let `performance.max_view_entries` applied to it.

* remove unneeded fill_defaults

* update gha

---------

Co-authored-by: hrsh7th <629908+hrsh7th@users.noreply.github.com>
2024-10-20 13:28:20 +09:00
hrsh7th
3874e09e80 fix(entry): remove offset + 1 for tailwindcss 2023-05-28 22:33:20 +09:00
Konstantin Labun
8b76965ed0 fix 1533, add regression test (#1558) 2023-05-05 14:26:55 +09:00
hrsh7th
0cb4b8a679 Format with stylua 2023-05-01 14:23:21 +00:00
Konstantin Labun
5547295bd0 fix: #1533 (#1534) 2023-05-01 23:23:02 +09:00
hrsh7th
69476c9e06 ci 2022-10-15 15:16:27 +09:00
hrsh7th
bf1b112615 Remove ansiblels test 2022-10-15 15:11:07 +09:00
hrsh7th
13d64460cb Fix entry:get_word()'s cache condition 2022-02-15 20:34:21 +09:00
hrsh7th
4f5cc6a9c8 Fix #801
Fix #615
Fix #798
2022-02-15 20:20:57 +09:00
hrsh7th
8fc8d31cf4 Support import completion 2022-01-18 19:32:51 +09:00
hrsh7th
405581e740 Fix invalid temporary text 2021-08-27 23:06:35 +09:00
hrsh7th
7873adf9a8 Fix #47 2021-08-24 13:23:27 +09:00
hrsh7th
59a6ee577a Add test 2021-08-10 21:56:42 +09:00
hrsh7th
d23d3533cf dev (#1)
* dev

* Improve sync design

* Support buffer local mapping

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* stylua

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* integration

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* update

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp

* tmp
2021-08-04 01:07:12 +09:00