oxc-project
oxc-resolver
BlogDocsChangelog

perf: cache canonicalization results at every recursion level

#843
Comparing
optimize-canonicalization-caching
(
1c9f519
) with
main
(
4528a3f
)
CodSpeed Performance Gauge
0%
Untouched
11
Skipped
5

Benchmarks

Skipped (5)

Passed

small
benches/resolver.rs::resolver::bench_package_json_deserialization::package_json_deserialization
CodSpeed Performance Gauge
+3%
11.8 µs11.5 µs
large
benches/resolver.rs::resolver::bench_package_json_deserialization::package_json_deserialization
CodSpeed Performance Gauge
+2%
27.1 µs26.5 µs
resolver_memory[drop]
benches/resolver.rs::resolver::bench_resolver_memory
CodSpeed Performance Gauge
+1%
86 ms84.9 ms
resolver_memory[single-thread]
benches/resolver.rs::resolver::bench_resolver_memory
CodSpeed Performance Gauge
0%
498.7 µs500.2 µs
complex_real
benches/resolver.rs::resolver::bench_package_json_deserialization::package_json_deserialization
CodSpeed Performance Gauge
0%
22.9 µs23 µs
resolver_memory[resolve from symlinks]
benches/resolver.rs::resolver::bench_resolver_memory
CodSpeed Performance Gauge
-1%
60.2 ms60.6 ms
medium
benches/resolver.rs::resolver::bench_package_json_deserialization::package_json_deserialization
CodSpeed Performance Gauge
-1%
17 µs17.2 µs
resolver_real[resolve from symlinks]
benches/resolver.rs::resolver::bench_resolver_real
CodSpeed Performance Gauge
-1%
60.2 ms60.7 ms
resolver_real[single-thread]
benches/resolver.rs::resolver::bench_resolver_real
CodSpeed Performance Gauge
-1%
493.2 µs497.4 µs
resolver_memory[multi-thread]
benches/resolver.rs::resolver::bench_resolver_memory
CodSpeed Performance Gauge
-1%
504.4 µs508.9 µs
resolver_real[multi-thread]
benches/resolver.rs::resolver::bench_resolver_real
CodSpeed Performance Gauge
-2%
506.2 µs516.6 µs

Commits

Click on a commit to change the comparison range
Base
main
4528a3f
-0.08%
perf: cache canonicalization results at every recursion level Moves path.canonicalized.get_or_init() from canonicalize_impl() into the recursive canonicalize_with_visited() function. This enables caching of parent directory canonicalization results, which are then reused when canonicalizing sibling paths. Performance impact (measured with many example on monitor-oxc): - Total filesystem syscalls: 124,071 → 39,296 (-68.3%) - symlink_metadata calls: 99,169 → 17,503 (-82.4%) - read_link calls: 6,127 → 3,018 (-50.7%) The optimization is particularly effective for: - Projects with deep node_modules structures - pnpm workspaces (heavy symlink usage) - Parallel resolution of multiple packages All existing tests pass with no behavior changes.
1c9f519
4 hours ago
by Boshen
© 2025 CodSpeed Technology
Home Terms Privacy Docs