Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve walk(…) performance #15529

Merged
merged 5 commits into from
Jan 6, 2025
Merged

Improve walk(…) performance #15529

merged 5 commits into from
Jan 6, 2025

Conversation

RobinMalfait
Copy link
Member

@RobinMalfait RobinMalfait commented Jan 2, 2025

This PR is a tiny improvement to the walk(…) implementations, not a super big
deal but thought about something and was pleasently surprised that it did have
an impact.

The idea is twofold:

  1. Reduce array allocations while walking to build a path to the current node. This re-uses the existing path array and pushes the current node before the recursive call and pops it afterwards. This way we don't need to allocate a new array for each recursive call. Testing this on Tailwind UI means ~14k fewer allocations.
  2. Instead of always calling .splice(…), we can directly update a single value in the array if we are replacing a node with another node.

Testing on the Tailwind UI codebase, this results in:
image

Instead of creating a new path over and over again, we can instead push
the node before the next loop starts, then pop it when we're done.
Instead of always calling `.splice()`, there are cases where if we
replace a node with a single other note that we can replace it directly
without using `splice(…)`.
@RobinMalfait RobinMalfait marked this pull request as ready for review January 6, 2025 09:53
@RobinMalfait RobinMalfait requested a review from a team as a code owner January 6, 2025 09:53
@RobinMalfait RobinMalfait enabled auto-merge (squash) January 6, 2025 11:01
Copy link
Member

@philipp-spiess philipp-spiess left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesomesauce

CHANGELOG.md Outdated Show resolved Hide resolved
Co-authored-by: Philipp Spiess <[email protected]>
@RobinMalfait RobinMalfait enabled auto-merge (squash) January 6, 2025 14:25
@RobinMalfait RobinMalfait merged commit af33451 into next Jan 6, 2025
5 checks passed
@RobinMalfait RobinMalfait deleted the feat/walk-optimizations branch January 6, 2025 14:27
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.

2 participants