Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

🐛 `NeedItem.add_backlink` scans a list per added back link: 4.1 s of a 21.8 s build on a 20k-need import

Aperta Adatta ai principianti
#2,249 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

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
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
python
Ambito
backend

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

bug pkg: sphinx-needs

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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di useblocks/sphinx-needs

Tutte le issue di useblocks/sphinx-needs

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.