perf: renderer highlights via vim.hl.range are slow on large trees
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 78/100
- Issue-Typ
- Refactoring
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- lua
- Bereich
- frontend, performance
Rechercherichtung
Beginne bei Renderer:render_hl und verfolge, wie es einzeilige Byte-Bereiche und Prioritäten anwendet. Vergleiche die vorhandenen Aufrufe von vim.hl.range mit nvim_buf_set_extmark unter Verwendung von vim.hl.priorities.user; überprüfe, ob die resultierenden Hervorhebungen identisch sind, und miss die Rendering-Zeit bei einem großen Baum. Fertig ist die Aufgabe, wenn die direkten Extmark-Aufrufe dieselben Bereiche, Prioritäten und dasselbe Erscheinungsbild beibehalten und gleichzeitig die Rendering-Zeit reduzieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Problem
Renderer:render_hl applies every highlight of every line with vim.hl.range. That function is generic: on each call it switches buffer context with vim._with, calls col('$') twice and calls getregionpos. nvim-tree's ranges are always single-line byte ranges, so none of that work is needed.
Impact
| µs per highlight | |
|---|---|
vim.hl.range |
6.1 |
nvim_buf_set_extmark |
0.74 |
At 16.8k visible lines, render_hl is about 50% of Renderer:draw() (620ms) and about 15% of reload_explorer.
Proposed fix
Call nvim_buf_set_extmark directly with the same ranges and the same priority (vim.hl.priorities.user). The highlights produced are identical. Happy to provide a PR for this ofc.
Environment: macOS, Nvim v0.13.0-dev, LuaJIT 2.1. Test repo: 16.8k files and folders, 3.1k git status entries (modified, untracked, ignored). Measured headless with vim.uv.hrtime() and the LuaJIT profiler (jit.p).
- Vorherrschende Sprache
- Lua
- Sterne
- 8.7k
- Forks
- 642
- Ø Merge
- 23 Std. 23 Min.
- Gemergte PRs (30 T.)
- 11
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus nvim-tree/nvim-tree.lua
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
nvim-tree/nvim-tree.lua#3383 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 77/100
nvim-tree/nvim-tree.lua#3382 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Use vim.Option getters and setters instead of directly settingEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
nvim-tree/nvim-tree.lua#3357 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Migrate To vim.packOffendocumentation PR please
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 65/100
nvim-tree/nvim-tree.lua#3179 · 6 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
perf: Filters:custom calls getcwd for every file, even with no custom filtersEvtl. vergeben @hood hat das vor 1 Tag übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 25/100
nvim-tree/nvim-tree.lua#3386 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in nvim-tree/nvim-tree.lua
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Balatro-Multiplayer/BalatroMultiplayerAPI#67 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Unconfirmed bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
luanti-org/luanti#17736 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug(bufdelete): all()/other() abort with "Invalid buffer id" when a buffer is wiped during the loopOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
folke/snacks.nvim#2986 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 79/100
PlotJuggler/PlotJuggler#1464 ·