perf: is_executable calls fs_access for every file on every reload
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
- 72/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- lua, neovim
- Bereich
- devtools, performance
Rechercherichtung
Beginne damit, utils.is_executable und die beiden beschriebenen Aufrufstellen zu finden: die Erstellung eines neuen FileNode und Explorer:reload, wo lstat bereits verfügbar ist. Prüfe, wie der stat-Dateityp und Ausführungsbits bereitstellt, und vergleiche das Verhalten mit den vorhandenen fs_access-Prüfungen. Fertig ist die Änderung, wenn reguläre Dateien ohne Ausführungsbits diesen Systemaufruf überspringen, während Verzeichnisse, Links und ausführbare Dateien ihr bisheriges Verhalten beibehalten.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Problem
utils.is_executable calls vim.uv.fs_access(path, "X") for:
- every new
FileNode, and - every existing node on every
Explorer:reload.
The node's lstat result is already available at both call sites.
Impact
fs_access costs 7.7µs per call vs 1.9µs for lstat. is_executable is about 11% of reload_explorer on a fully expanded 16.8k-node tree.
Proposed fix
Pass the existing stat into is_executable. A regular file with none of the user, group or other execute bits set can never pass access(X), even as root, so return false without the syscall. Files with execute bits, directories and links still use fs_access, happy to follow up with a PR soon.
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 77/100
nvim-tree/nvim-tree.lua#3382 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
nvim-tree/nvim-tree.lua#3381 ·
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 78/100
Balatro-Multiplayer/BalatroMultiplayerAPI#67 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
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 ·
-
bug discord guide:ruins-of-lordaeron locale:enUS triage v0.3.2
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
fitzforge/polestar#999 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
status: waiting-for-triage
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 86/100
fluent/fluent-bit#12747 · 2 Kommentare · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag