diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-08-20 01:54:09 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-08-20 02:49:30 +0900 |
| commit | 80c2120a64ce9b989da288ce1fcf80dec5cf38c1 (patch) | |
| tree | dca0844c4d037db685591e5dacc04fbd11263fb2 /crates/shirabe/src/dependency_resolver/pool.rs | |
| parent | ad335434e5376d29f38882d0dceb2461bfd8d5c6 (diff) | |
| download | php-shirabe-80c2120a64ce9b989da288ce1fcf80dec5cf38c1.tar.gz php-shirabe-80c2120a64ce9b989da288ce1fcf80dec5cf38c1.tar.zst php-shirabe-80c2120a64ce9b989da288ce1fcf80dec5cf38c1.zip | |
perf(semver): build CompilingMatcher's cache key without allocating
CompilingMatcher::match formats `<operator><constraint>;<version>` into a
fresh String on every call, including the cache hits the key exists to serve.
Profiling put the formatting at 2.9 % of self time, more than the match it
guards. Build the key into a reused thread-local buffer and copy it only when
there is a miss to record.
Taking the version as `&str` rather than `String` removes the copy the callers
made for the same reason: `optimize_by_identical_dependencies` allocated one
per candidate package in its innermost loop.
laravel/framework require --no-install (warm cache, network disabled):
instructions:u 9142799608 -> 8895247586 (-2.7 %)
cycles:u 4626440169 -> 4496152041 (-2.8 %)
wall (hyperfine, 25 runs)
1.239 s +- 0.014 s -> 1.227 s +- 0.016 s (-1.0 %)
monolog/monolog is unchanged (102.1 ms -> 101.6 ms, within noise).
composer.lock is byte-identical for both packages.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/dependency_resolver/pool.rs')
| -rw-r--r-- | crates/shirabe/src/dependency_resolver/pool.rs | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/crates/shirabe/src/dependency_resolver/pool.rs b/crates/shirabe/src/dependency_resolver/pool.rs index c12f819d..7ec6196b 100644 --- a/crates/shirabe/src/dependency_resolver/pool.rs +++ b/crates/shirabe/src/dependency_resolver/pool.rs @@ -305,7 +305,7 @@ impl Pool { if candidate_name == name { return constraint.is_none() - || CompilingMatcher::r#match(constraint.unwrap(), CmpOp::Eq, candidate_version); + || CompilingMatcher::r#match(constraint.unwrap(), CmpOp::Eq, &candidate_version); } let provides = candidate.get_provides(); |
