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.
Today Finder uses Enum.reduce and nested calls to traverse_with to do it's filtering.
This works fine when using HTMLTree, but this structure makes it harder to optimize some cases in which the HTMLTree isn't necessary (#515).
This PRs updates Finder to use a stack, similar to what we have on HTMLTree.build_tree. This makes it easier to implement the change for the ticket above, or other future changes to operations that don't need the HTMLTree.build step.
I also did some other clean ups in this module, I've split each change in a separated commit.
Performance is basically the same, but when profiling the timing is a lot better and more readable because of the removal of Enum.reduce
Before - selector
span a * i
After