Skip to content

perf: compile ApiPathImpl part patterns once per instance - #38

Open
Vojtasii wants to merge 1 commit into
atlassian:masterfrom
Vojtasii:perf-apipath-precompile-part-patterns
Open

Vojtasii wants to merge 1 commit into
atlassian:masterfrom
Vojtasii:perf-apipath-precompile-part-patterns

Conversation

@Vojtasii

@Vojtasii Vojtasii commented Sep 21, 2026

Copy link
Copy Markdown

Description

partMatches compiled a Pattern on every call.
Operation resolution compares a request against every API path in the matching bucket, so the compilations scaled with the size of the spec rather than the request.

The pattern depends only on the API path template, which is fixed for the lifetime of the ApiPathImpl, so it is now compiled once in the constructor.

Context

While profiling a long running validation I noticed a large amount of samples within the partMatches method. Through investigation I found out that it was mostly because of GC pressure with another problem, but this patch by itself seemed worth it to me to submit nonetheless.

For me, it was about 380 KiB per request (very large open-api-spec).

I also added some baseline tests, since I am touching this part of the code. I verified that they pass before and after the change.

partMatches compiled a Pattern on every call.
Operation resolution compares a request against every API path in the matching bucket,
so the compilations scaled with the size of the spec rather than the request.

The pattern depends only on the API path template,
which is fixed for the lifetime of the ApiPathImpl,
so it is now compiled once in the constructor.
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