perf: renderer highlights via vim.hl.range are slow on large trees
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
- Tipo di issue
- Refactoring
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- lua
- Ambito
- frontend, performance
Direzione di ricerca
Inizia da Renderer:render_hl e segui come applica intervalli di byte su una singola riga e priorità. Confronta le chiamate esistenti a vim.hl.range con nvim_buf_set_extmark usando vim.hl.priorities.user; verifica che le evidenziazioni risultanti siano identiche e misura il tempo di rendering su un albero di grandi dimensioni. Il lavoro è completato quando le chiamate dirette a extmark mantengono gli stessi intervalli, priorità e aspetto, riducendo al contempo il tempo di rendering.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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).
- Lingua principale
- Lua
- Stelle
- 8.7k
- Fork
- 642
- Merge medio
- 1g 4m
- PR unite (30g)
- 11
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di nvim-tree/nvim-tree.lua
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
nvim-tree/nvim-tree.lua#3383 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
nvim-tree/nvim-tree.lua#3382 ·
I maintainer di solito rispondono entro 1 giorno
-
Use vim.Option getters and setters instead of directly settingForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
nvim-tree/nvim-tree.lua#3357 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Migrate To vim.packApertadocumentation PR please
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
nvim-tree/nvim-tree.lua#3179 · 6 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
perf: Filters:custom calls getcwd for every file, even with no custom filtersForse già presa @hood l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 25/100
nvim-tree/nvim-tree.lua#3386 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di nvim-tree/nvim-tree.lua
Issue simili
-
bug confirmed discord guide:tyrs-watch locale:enUS navigation v0.3.2
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
fitzforge/polestar#855 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 91/100
DennisRas/WeeklyKnowledge#164 ·
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
perf: <BS> runs regex compares for rules that can never deleteForse già presa @hood l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
windwp/nvim-autopairs#555 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
I maintainer di solito rispondono entro 2 giorni