perf: Optimize leaf node detection by using direct array length access#707
Merged
amitguptagwl merged 1 commit intoNaturalIntelligence:masterfrom Feb 9, 2025
Merged
Conversation
…unction in OrderedObjParser.js
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.
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.