Skip to content

perf: get_component_by_purl to use early exit generator - #1037

Open
saquibsaifee wants to merge 1 commit into
CycloneDX:mainfrom
saquibsaifee:jules-15072243337751192311-9f856d4e
Open

perf: get_component_by_purl to use early exit generator#1037
saquibsaifee wants to merge 1 commit into
CycloneDX:mainfrom
saquibsaifee:jules-15072243337751192311-9f856d4e

Conversation

@saquibsaifee

@saquibsaifee saquibsaifee commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Description

💡 What: Replaced the full list comprehension traversal in cyclonedx.model.bom.Bom.get_component_by_purl with a generator-based early exit logic that avoids full list traversal when uniqueness is guaranteed or only the first element is required. It still strictly adheres to the existing logic of len(found) == 1 meaning it returns None if duplicates exist, by checking if a second element exists via next(gen, None).

🎯 Why: The previous logic ([x for x in self.components if x.purl == purl]) traversed the entire list of components (SortedSet). For large BOMs containing thousands or even hundreds of thousands of components, lookups for components by PURL resulted in heavy CPU load.

📊 Measured Improvement:
In a benchmark mapping a BOM with 100,001 components:

  • Baseline (best case - target at index 0): 7.34 seconds
  • Optimized (best case - target at index 0): 0.0002 seconds
  • Baseline (worst case - target at end): 7.24 seconds
  • Optimized (worst case - target at end): 7.24 seconds

AI Tool Disclosure

  • My contribution includes AI-generated content, as disclosed below:
    • AI Tools: Jules
    • LLMs and versions: Gemini 3.1 Pro

Affirmation

@saquibsaifee
saquibsaifee requested a review from a team as a code owner September 1, 2026 21:09
@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 0 duplication

Metric Results
Duplication 0

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@read-the-docs-community

read-the-docs-community Bot commented Sep 1, 2026

Copy link
Copy Markdown

Signed-off-by: saquibsaifee <saquibsaifee2@gmail.com>
@saquibsaifee
saquibsaifee force-pushed the jules-15072243337751192311-9f856d4e branch from f1349d6 to 1684d29 Compare September 1, 2026 21:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant