🚀 Major Parser Performance Optimizations for Large Xcode Projects#27
Open
maatheusgois-dd wants to merge 11 commits intoEvanBacon:mainfrom
Open
🚀 Major Parser Performance Optimizations for Large Xcode Projects#27maatheusgois-dd wants to merge 11 commits intoEvanBacon:mainfrom
maatheusgois-dd wants to merge 11 commits intoEvanBacon:mainfrom
Conversation
🚀 Key Improvements: - Eliminated object spread operations in JsonVisitor (40-50% speed boost) - Added streaming parser for massive files (handles 94MB+ projects) - Memory-efficient analysis that extracts metadata without full object tree - Automatic strategy selection based on file size - Enhanced XcodeProject.openLazy() with progress reporting - Comprehensive test coverage for all optimization strategies 📊 Performance Results: - 0.10MB files: 51% faster (7.80ms → 3.84ms) - 94.81MB files: ∞x improvement (crash → 3.5s success) - Memory usage: Managed 4GB peak for DoorDash project ✅ Backward compatible - all existing APIs work unchanged
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.
📋 Problem
The existing
pbxprojparser crashed with heap out of memory errors on large projects like Test (94.81MB, 125K+ objects). The originalJsonVisitorused expensive object spread operations ({...prev, ...item}) causing O(n²) complexity and excessive memory allocation.⚡ Solution
Implemented multi-tier parsing optimizations with automatic strategy selection based on file size:
1. Optimized JsonVisitor (
OptimizedJsonVisitor.ts)isa,children,name, etc.) to reduce string creation2. Streaming Parser (
StreamingJsonVisitor.ts)3. Memory-Efficient Analyzer (
MemoryEfficientVisitor.ts)4. Enhanced XcodeProject API
XcodeProject.openLazy()- Skip expensive full object inflation📊 Performance Results
Before vs After:
Test Project Success:
🔧 API Usage
Automatic optimization (recommended):
Manual strategy selection:
🎯 Parsing Strategy Selection
✅ Breaking Changes
None - all optimizations are backward compatible. Existing
XcodeProject.open()continues to work unchanged.🧪 Testing
This enables parsing of previously impossible large Xcode projects while significantly improving performance for all project sizes! 🎉