🐛 `NeedItem.add_backlink` scans a list per added back link: 4.1 s of a 21.8 s build on a 20k-need import
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
- 62/100
Direzione di ricerca
Inizia da add_backlink in packages/sphinx-needs/src/sphinx_needs/need_item.py (intorno alla riga 977), dove avviene la scansione della lista con backlink not in self._backlinks[link_type], poi controlla sort_backlinks per preservare l'ordine della lista. Il ciclo equivalente sui back link in roles/need_part.py è il secondo punto da esaminare. Qualsiasi build di un grande insieme di need mostrerà il costo, perché l'esportazione da 20k need citata nell'issue non è presente nel repository. È completato quando l'appartenenza è O(1) tramite un set o un dict affiancato alla lista, i test esistenti continuano a passare e l'ordine dei back link resta invariato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Measured at master 3210ac5c (2026-10-14) with a one-page project that loads ubCode's 20 847-need export through needs_external_needs (-E, -b html): wall time 21.8 s, of which build_backlinks costs 4.1 s un-profiled (a needs-before-sealing probe re-running it), about 19 % of the build.
The cause is NeedItem.add_backlink (packages/sphinx-needs/src/sphinx_needs/need_item.py:977): if backlink not in self._backlinks[link_type] is a linear scan of a list, so adding the n-th back link to a need costs n comparisons. cProfile over the same build: 58 595 add_backlink calls, 50.9 M NeedLink.__eq__ calls (about 870 comparisons per added back link), 8.1 s profiled.
A set beside the list (or a dict keyed by the link) makes the membership test O(1); the list keeps its order for sort_backlinks. The equivalent loop over a part's back links (roles/need_part.py) is worth the same look.
Evidence: a cProfile top-15 table and the probe output are in the njv2 recon notes of the orchestration folder (not in this repository).
- Lingua principale
- Python
- Stelle
- 309
- Fork
- 103
- Merge medio
- 10h 9m
- PR unite (30g)
- 133
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
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 useblocks/sphinx-needs
-
bug pkg: sphinx-needs
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
useblocks/sphinx-needs#2296 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation pkg: sphinx-needs
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
useblocks/sphinx-needs#2255 ·
I maintainer di solito rispondono entro 1 giorno
-
bug pkg: sphinx-needs
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
useblocks/sphinx-needs#2253 ·
I maintainer di solito rispondono entro 1 giorno
-
bug pkg: sphinx-needs
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
useblocks/sphinx-needs#2251 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation pkg: sphinx-test-reports
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
useblocks/sphinx-needs#2247 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di useblocks/sphinx-needs
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
omegaup/omegaup#10353 · 1 commento ·
I maintainer di solito rispondono entro 5 giorni
-
bot-triaged module: LrScheduler module: optimizer triaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
documentation glm5 llm-model
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
vllm-project/vllm-ascend#19062 ·
I maintainer di solito rispondono entro 1 giorno
-
Author Page: shuai-zhao-llmApertaauthor-page correction
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
acl-org/acl-anthology#10496 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno