Skip to content

Optimize schema-comparator diffing performance#94

Open
swalkinshaw wants to merge 1 commit intomainfrom
schema-comparator-perf
Open

Optimize schema-comparator diffing performance#94
swalkinshaw wants to merge 1 commit intomainfrom
schema-comparator-perf

Conversation

@swalkinshaw
Copy link
Contributor

@swalkinshaw swalkinshaw commented Mar 17, 2026

Optimize schema-comparator diffing performance (~65% faster on large schemas)

Key optimizations:

  • Eliminate intermediate Vec allocations via diff_into(&mut Vec) pattern
  • Single-pass field matching: merge removals + common diffs into one iteration
  • Unified diff_directives_into replacing 3 separate directive functions
  • Ptr equality fast path for identical schemas (0µs)
  • HashMap fallback for types with 64+ fields (O(1) lookups on large types)
  • CriticalityLevel enum to avoid Cow string allocations during sorting
  • Early exits for empty directives/arguments, #[inline] hints on hot paths
  • Pre-allocate changes Vec with capacity 256
  • Criterion benchmark suite with real schema fixtures

Note: this is a manually curated (with the help of Claude) and cleaned up version of an /autoresearch run

@swalkinshaw swalkinshaw requested a review from adampetro March 17, 2026 16:21
…schemas)

Key optimizations:
- Eliminate intermediate Vec allocations via diff_into(&mut Vec) pattern
- Single-pass field matching: merge removals + common diffs into one iteration
- Unified diff_directives_into replacing 3 separate directive functions
- Ptr equality fast path for identical schemas (0µs)
- HashMap fallback for types with 64+ fields (O(1) lookups on large types)
- CriticalityLevel enum to avoid Cow string allocations during sorting
- Early exits for empty directives/arguments, #[inline] hints on hot paths
- Pre-allocate changes Vec with capacity 256
- Criterion benchmark suite with real schema fixtures

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@swalkinshaw swalkinshaw force-pushed the schema-comparator-perf branch from c4fb557 to 73d5d13 Compare March 17, 2026 16:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant