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.
Closes #3549
Turns out Play calls
DefaultPekkoHttpServerComponents.route
on each request, so we shouldn't rebuild routing in that method. Instead, it should return a pre-calculated value.This isn't a fix to Tapir per se, but to all usages of the Play server we have in standard tests and performance tests.
Performance tests used to show terrible latency/throughput and Tapir code occupying over 90% of all frames registered by the profiler.
After this fix, the latency is dramatically better (see the blue line):
Throughput also reaches great values: ~160k reqs/sec vs 5k before the fix. Tapir code occupies no more than 9% of all profiler frames. There may be still some possible optimizations in the late 0.999s of latency to reach values closer to the vanilla server under very heavy load, but at this point I don't see them as necessary.