micronaut-core icon indicating copy to clipboard operation
micronaut-core copied to clipboard

Add fast compiled route matcher

Open yawkat opened this issue 9 months ago • 19 comments

Note this is two commits that are mostly independent, but the second commit has the vast majority of the changes.


This PR adds an alternate request processing path that mostly bypasses RoutingInBoundHandler. The goal is to speed up processing of simple routes significantly.

The approach taken here is to accumulate all routes, prepare those that can be executed quickly (i.e. simple argument / return binding, exact path match, no difficult filters), and then compile the routing tree into an optimized MatchPlan. In principle this approach could be extended to all routes, we "just" need to adapt other framework features (e.g. path parameters) to be included in the compiled MatchPlan. This is my long-term vision for the future of routing in the Micronaut HTTP stack.

The results are very promising so far. FullHttpStackBenchmark goes from ~7µs to ~5µs, a big improvement. And there aren't even very many microoptimizations yet.

yawkat avatar Nov 17 '23 14:11 yawkat