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

Draft
wants to merge 2 commits into
base: next
Choose a base branch
from
Draft

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(…)`.
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