perf: Optimize leaf node detection by using direct array length access #707
+1
−1
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.
Purpose / Goal
To improve XML parsing performance by optimizing leaf node detection in OrderedObjParser.
Background
When parsing XML documents, the parser frequently needs to check if a node is a leaf node. The current implementation creates unnecessary temporary arrays during this check, which impacts performance especially for large XML files.
Technical Details
The optimization changes how we check for leaf nodes:
This is safe because:
childis explicitly initialized as an array in XmlNode constructoraddandaddChild)lengthproperty is read-only and cannot be corruptedPerformance Impact
Test Environment
Benchmark Results
Small File (1.5KB, sample.xml)
Before optimization:
After optimization:
Large File (98MB, large.xml)
Before optimization:
After optimization:
Analysis
Small File Performance:
Large File Performance:
Key Benefits:
Type
Testing
Notes
Technical Implementation Details
The safety of this optimization is guaranteed by the XMLNode implementation:
childarray is initialized in constructor:this.child = []add(): Adds text nodes, CDATA, commentsaddChild(): Adds nested XML nodesNote: I have read the contribution guidelines before raising this PR.