Skip to content

Speed-up Cache#id_for

Peter Leitzen requested to merge pl-speed-up-cache-id-for into main

Description

Prefer respond_to? over catching exception which is much slower.

Based on !46 (merged).

Benchmarks

These 👇 results compare invocations per seconds on main vs this branch.

$ bundle exec ruby benchmarks/repeated_invocation.rb
Warming up --------------------------------------
cached - known ability - pl-speed-up-cache-id-for
                        86.067k i/100ms
cached - unknown ability - pl-speed-up-cache-id-for
                        85.030k i/100ms
uncached - known ability - pl-speed-up-cache-id-for
                         1.599k i/100ms
uncached - unknown ability - pl-speed-up-cache-id-for
                        11.711k i/100ms
Calculating -------------------------------------
cached - known ability - pl-speed-up-cache-id-for
                        845.891k (± 2.3%) i/s -      4.303M in   5.090047s
cached - unknown ability - pl-speed-up-cache-id-for
                        867.692k (± 1.3%) i/s -      4.422M in   5.096701s
uncached - known ability - pl-speed-up-cache-id-for
                         16.001k (± 4.1%) i/s -     79.950k in   5.006550s
uncached - unknown ability - pl-speed-up-cache-id-for
                        100.078k (± 3.5%) i/s -    503.573k in   5.037858s

Comparison:
cached - unknown ability - pl-speed-up-cache-id-for:   867692.5 i/s
cached - known ability - pl-speed-up-cache-id-for:   845890.9 i/s - same-ish: difference falls within error
cached - known ability - pl-benchmark-ips:   477663.2 i/s - 1.82x  slower
cached - unknown ability - pl-benchmark-ips:   433737.1 i/s - 2.00x  slower
uncached - unknown ability - pl-speed-up-cache-id-for:   100077.6 i/s - 8.67x  slower
uncached - unknown ability - pl-benchmark-ips:    92715.1 i/s - 9.36x  slower
uncached - known ability - pl-speed-up-cache-id-for:    16000.9 i/s - 54.23x  slower
uncached - known ability - pl-benchmark-ips:    12916.3 i/s - 67.18x  slower

Related Issues

n/a

Suggested version bump

  • Major (backwards incompatible changes)
  • Minor (backwards compatible changes)
  • Patch (API compatible changes)

Checklist

  • Tests have been added or updated to cover any changes in behavior
  • This does not change the API to consume this library, or a suggested version bump has been provided
  • The CHANGELOG.md has been updated
  • No new runtime dependencies have been introduced
Edited by Peter Leitzen

Merge request reports