Skip to content

Conversation

@mattcosta7
Copy link
Contributor

@mattcosta7 mattcosta7 commented Dec 15, 2025

Summary

Performance optimizations for Banner CSS selectors to improve INP (Interaction to Next Paint).

Changes

  • Scope :has(.BannerActions) selectors to shallow path > * > for O(1) lookup
  • Scope :has(.BannerActionsContainer) to direct child with > combinator

Expected INP Impact

Scenario Before After Improvement
Worst case (Banner in complex page layout) ~20-40ms style recalc on interaction <5ms 75-90% reduction
Average case (typical Banner usage) ~10-15ms style recalc <3ms 70-80% reduction
Best case (simple Banner) ~5ms style recalc <1ms ~80% reduction

Why this matters

Banner uses multiple :has() selectors to detect the presence of actions. These selectors fire on every style recalculation, including hover, focus, and any DOM changes. Scoping to shallow paths eliminates full subtree traversal.


Part of the INP performance optimization effort. See #7312 for full context.

- Scope :has(.BannerActions) selectors to shallow path > * > for O(1) lookup
- Scope :has(.BannerActionsContainer) to direct child with > combinator

Part of #7312
@changeset-bot
Copy link

changeset-bot bot commented Dec 15, 2025

🦋 Changeset detected

Latest commit: 154df2b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@primer/react Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions github-actions bot added the integration-tests: recommended This change needs to be tested for breaking changes. See https://arc.net/l/quote/tdmpakpm label Dec 15, 2025
@github-actions
Copy link
Contributor

👋 Hi, this pull request contains changes to the source code that github/github-ui depends on. If you are GitHub staff, test these changes with github/github-ui using the integration workflow. Or, apply the integration-tests: skipped manually label to skip these checks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

integration-tests: recommended This change needs to be tested for breaking changes. See https://arc.net/l/quote/tdmpakpm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants