fix: [#2046] Replace slice(1) with index-based traversal in QuerySelector#2047
Open
TrevorBurnham wants to merge 1 commit intocapricorn86:masterfrom
Open
fix: [#2046] Replace slice(1) with index-based traversal in QuerySelector#2047TrevorBurnham wants to merge 1 commit intocapricorn86:masterfrom
TrevorBurnham wants to merge 1 commit intocapricorn86:masterfrom
Conversation
…n QuerySelector Optimize QuerySelector by replacing array slice operations with index-based traversal. This eliminates the creation of intermediate arrays on each recursive call, reducing memory allocations and GC pressure. Changes: - matchSelector: Added selectorIndex parameter instead of slicing - findAll: Added selectorIndex parameter instead of slicing - findFirst: Added selectorIndex parameter instead of slicing The selector items array is now passed by reference with an index, avoiding O(n) array copies on each recursive step.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #2046
This PR optimizes
QuerySelectorby replacing inefficient array operations with index-based traversal and accumulator patterns, eliminating unnecessary memory allocations during recursive DOM traversal.Changes
Adds a
selectorIndexparameter tomatchSelector,findAll, andfindFirstto avoidslice(1)array copies on each recursive call.Eliminates
items.reverse()inmatches()by traversing the selector array backwards (fromlength - 1to0) instead of reversing the array first.Changes
findAllfrom returning arrays (withconcat()) to using an accumulator array parameter, eliminating O(n) array copies on each recursive step.Removes redundant
children.indexOf(child)calls infindAllandfindFirstby using the existing loop indexi.Before
After
Impact
slice(1)andconcat()on each recursive stepmatches()indexOflookups in sibling traversal