fix: invoke mapNodesToParents lazily #2132
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In a recent PR, I introduced a significant performance regression to SVGO. This was missed as it only had a noticeable impact on very large SVGs. In the SVG from #2075, it took 70~ seconds to optimize before the commit, then 240~ seconds after the commit.
This fix takes it down to around 74~ seconds on my machine.
Instead of populating the map of nodes to parent nodes eagerly when creating the css-select Adapter, we now defer it to when css-select would actually invoke the
Adapter#getParent
method. In most instances, the map was never being used, so it was a waste of compute to initialize and populate the map.To avoid Rollup reporting circular dependencies, I've created a
util
directory, and migrated some of the helpers to isolated files.Related