Skip to content

docs(performance): republish the comparative tables after #540, #541 and #542 - #543

Merged
lesnik512 merged 1 commit into
mainfrom
docs/performance-republish
Sep 27, 2026
Merged

lesnik512 merged 1 commit into
mainfrom
docs/performance-republish

Conversation

@lesnik512

Copy link
Copy Markdown
Member

What

Regenerated docs/introduction/performance.md with just bench-report (5 runs) at main 630de77, the first publication after #540 (inline cross-scope hop), #541 (one lock per tree) and #542 (no coroutine for finalizer-less items on close_async). Same machine and CPython as the 3.5.0 publication (Apple M2, macOS 26.6.2, CPython 3.14.7), so the page says absolutes are comparable this time, not only ratios.

Numbers

3.5.0 (18bbe64) now (630de77)
C1 transient, by reference 252 ns 253 ns
C2 warm singleton, by reference 151 ns 151 ns
C3 deep chain, by reference 792 ns 789 ns
C4 request lifecycle 2.42 µs 2.29 µs
C4 vs that-depends / dishka / wireup 0.19 / 1.14 / 0.15 0.18 / 1.08 / 0.14
C6 context 1.62 µs 1.45 µs
C6 vs dependency-injector / that-depends 0.42 / 0.53 0.38 / 0.48
C6 vs dishka / wireup 1.28 / 1.16 1.15 / 1.02

C1-C3 ratios moved by at most 0.04 and inside their cells' spread. The three changes sit on paths those bodies never take, and the "what moved" section says so, then attributes C4 and C6 to the guard-tier deltas measured per change in #540 and #541. #542 has no cell on this page: C4's cached item has an async finalizer and C6's child caches nothing and closes synchronously.

Narrative changes

Not changed

  • Rival pins. dishka 1.10.1, dependency-injector 4.49.1 and wireup 2.12.0 are the latest releases. that-depends has a 4.1.1 patch over the pinned 4.1.0; I left the pin alone rather than bump a dependency inside a docs republish. If you want it in, the suite and the report need one more run.

Checks

  • mkdocs build --strict clean.
  • tests/test_bench_report.py and tests/test_docs_slug_census.py pass; no code changed.

…and #542

Regenerated with `just bench-report` (5 runs) at main 630de77 on the same
machine and CPython build as the 3.5.0 publication. C1-C3 are unchanged
within their spread; C4 and C6 moved with the per-request path, and the
"what moved" section reads both the absolutes and the ratios this time.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Details
Benchmark suite Current: 8c5cabf Previous: 630de77 Ratio
benchmarks/test_guard_by_type.py::test_g16_resolve_by_type 5059376.33473904 iter/sec (stddev: 9.73522275080419e-9) 3458595.595748503 iter/sec (stddev: 1.9175525176768685e-8) 0.68
benchmarks/test_guard_by_type.py::test_g17_resolve_by_type_large_registry 5005012.269539626 iter/sec (stddev: 5.295967710094353e-9) 3505387.8161276644 iter/sec (stddev: 1.9896978493030955e-8) 0.70
benchmarks/test_guard_cold.py::test_g8_cold_first_resolve 21130.287439605687 iter/sec (stddev: 0.00021888307001103854) 15782.857743208093 iter/sec (stddev: 0.0000514760284889913) 0.75
benchmarks/test_guard_cold.py::test_g8b_cold_first_resolve_cached 19919.412702398004 iter/sec (stddev: 0.00003534473747289569) 12991.65479073352 iter/sec (stddev: 0.00013965726056910309) 0.65
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[1] 631.8422832697348 iter/sec (stddev: 0.000018771817936865987) 375.6259288687818 iter/sec (stddev: 0.00005540898292543445) 0.59
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[2] 600.0372840866078 iter/sec (stddev: 0.000023303024991927734) 359.97883517557875 iter/sec (stddev: 0.000042464375522945685) 0.60
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[4] 544.9428266107432 iter/sec (stddev: 0.00003561166298516465) 328.9776364261448 iter/sec (stddev: 0.00017426207080896422) 0.60
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[1] 2316.8810132357285 iter/sec (stddev: 0.0001334352200754165) 1620.4461412328767 iter/sec (stddev: 0.0002210603431817769) 0.70
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[2] 1840.4705015620684 iter/sec (stddev: 0.00015807551849882914) 1322.1786992827583 iter/sec (stddev: 0.00021799588538647617) 0.72
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[4] 1144.2349324859263 iter/sec (stddev: 0.0011713937349736065) 963.2801461411867 iter/sec (stddev: 0.00019582103879055678) 0.84
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[1] 2259.637126381067 iter/sec (stddev: 0.00015298225581638047) 1413.5869025521245 iter/sec (stddev: 0.0011339355944337967) 0.63
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[2] 1644.2597228261086 iter/sec (stddev: 0.00015534926433204702) 1204.4232685427303 iter/sec (stddev: 0.00020564581985015468) 0.73
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[4] 1060.344665563797 iter/sec (stddev: 0.00016963474815149615) 794.3816773325422 iter/sec (stddev: 0.00022410849589942912) 0.75
benchmarks/test_guard_lifecycle.py::test_g6_build_child_container 1113255.705456117 iter/sec (stddev: 2.7338489615479312e-8) 790971.9098978229 iter/sec (stddev: 7.992825540723303e-8) 0.71
benchmarks/test_guard_lifecycle.py::test_g6b_build_child_container_auto_scope 977675.3456454482 iter/sec (stddev: 7.483835091905133e-8) 742402.9396779829 iter/sec (stddev: 5.579483001486511e-8) 0.76
benchmarks/test_guard_lifecycle.py::test_g7_request_lifecycle_batch 3243.885595541588 iter/sec (stddev: 0.000025819530674355453) 2480.450741996853 iter/sec (stddev: 0.000011115551558497369) 0.76
benchmarks/test_guard_lifecycle.py::test_g7c_event_loop_floor_control 74323.79743270615 iter/sec (stddev: 0.000001595546900897344) 58336.27524530338 iter/sec (stddev: 0.000001807854169572081) 0.78
benchmarks/test_guard_lifecycle.py::test_g13_teardown_at_scale 62128.59025241559 iter/sec (stddev: 0.000002278412966697436) 44542.35465145128 iter/sec (stddev: 0.0000027101930811755413) 0.72
benchmarks/test_guard_lifecycle.py::test_g13b_teardown_at_scale_async_no_finalizers 763.2411266948477 iter/sec (stddev: 0.00011795305523744461) 579.217454201511 iter/sec (stddev: 0.000019235655632014152) 0.76
benchmarks/test_guard_resolve.py::test_g1_transient_resolve 2986817.903211386 iter/sec (stddev: 2.7017668494316478e-8) 2162940.0021536555 iter/sec (stddev: 5.0203571063095606e-8) 0.72
benchmarks/test_guard_resolve.py::test_g2_cached_resolve 4735621.162442394 iter/sec (stddev: 1.6173014511341667e-8) 3375449.377799119 iter/sec (stddev: 2.2651655701711203e-8) 0.71
benchmarks/test_guard_resolve.py::test_g3_deep_chain 932869.3023747454 iter/sec (stddev: 2.3652543530951174e-7) 725224.3245754899 iter/sec (stddev: 4.28630234845298e-8) 0.78
benchmarks/test_guard_resolve.py::test_g4_wide_resolve 624908.1970797918 iter/sec (stddev: 3.230190135947708e-7) 475077.03136465105 iter/sec (stddev: 3.345593938388199e-7) 0.76
benchmarks/test_guard_resolve.py::test_g5_cross_scope 2614746.3457473833 iter/sec (stddev: 5.5459065732966545e-8) 1944942.565849936 iter/sec (stddev: 2.701008105482467e-8) 0.74
benchmarks/test_guard_resolve.py::test_g9_context_resolve 1373616.609246794 iter/sec (stddev: 1.6803505698944785e-7) 1044042.5431684735 iter/sec (stddev: 1.7091475241879198e-7) 0.76
benchmarks/test_guard_resolve.py::test_g12_override_active_resolve 1067889.7563945032 iter/sec (stddev: 4.8031770206028233e-8) 716780.8797257992 iter/sec (stddev: 1.0391109622886306e-7) 0.67
benchmarks/test_guard_resolve.py::test_g18_alias_hop 3379861.0640467065 iter/sec (stddev: 8.867753522765185e-9) 2103044.4238886614 iter/sec (stddev: 1.7001305379809235e-8) 0.62
benchmarks/test_guard_validate.py::test_g10_validate_deep_chain 33251.51355071251 iter/sec (stddev: 0.000023502662129626023) 23120.482065167533 iter/sec (stddev: 0.000022322313068631583) 0.70
benchmarks/test_guard_validate.py::test_g11_validate_wide 20107.803565069476 iter/sec (stddev: 0.00002247504177909432) 14079.545291542308 iter/sec (stddev: 0.00002781562242493228) 0.70

This comment was automatically generated by workflow using github-action-benchmark.

@lesnik512
lesnik512 merged commit a324645 into main Sep 27, 2026
10 checks passed
@lesnik512
lesnik512 deleted the docs/performance-republish branch September 27, 2026 20:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant