perf: speed up route validator scanning - #108
Open
RomainLanz wants to merge 1 commit into
Open
Conversation
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.
Hey! 👋
Route validator scanning currently builds six ast-grep patterns for every controller method it inspects. This repeated pattern construction becomes a visible CPU cost as the route count grows.
This PR traverses call expressions once and compares their function references directly. It preserves the existing
$CTXreceiver behavior, ignores comments inside member expressions, and does not introduce optional chaining matches that the previous ast-grep patterns rejected.Focused tests cover comments, nested calls,
tryValidateUsing,$CTX, VineJS calls, member references, optional chaining, and direct validator usage.Benchmark
Node.js 24.20.0 using the public
RoutesScanner.scanAPI. The fixture uses five actions per controller and distributes the six supported validation syntaxes across routes.Each variant ran in 4 independent processes with 2 warmups and 15 measured scans per process. Execution order alternated between variants and GC ran before every measurement.
At 500 routes, the change saves 48.54 ms per complete scan.
Across ten 500-route scans, the CPU profile dropped from 3,330 to 2,503 samples. Samples attributed directly to
inspectMethodArgumentsdropped from 835 to 85.Validation
git diff --checkpassed