Skip to content

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

Co-authored-by: Philipp Spiess <hello@philippspiess.com>
@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.

3 participants