Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use #start_with? and #[] for speed #21100

Merged
merged 1 commit into from
Aug 2, 2015
Merged

Commits on Aug 2, 2015

  1. Use #start_with? and #[] for speed

    While the readability may be slightly worse, the speed improvement is
    significant: Twice as fast when there's no leading "/" to remove, and
    over 4 times as fast when there is a leading "/".
    
    Benchmark:
    
        require 'benchmark/ips'
    
        def match(controller)
          if controller
            if m = controller.match(/\A\/(?<controller_without_leading_slash>.*)/)
              m[:controller_without_leading_slash]
            else
              controller
            end
          end
        end
    
        def start_with(controller)
          if controller
            if controller.start_with?('/'.freeze)
              controller[1..-1]
            else
              controller
            end
          end
        end
    
        Benchmark.ips do |x|
          x.report("match") { match("no_leading_slash") }
          x.report("start_with") { start_with("no_leading_slash") }
    
          x.compare!
        end
    
        Benchmark.ips do |x|
          x.report("match") { match("/a_leading_slash") }
          x.report("start_with") { start_with("/a_leading_slash") }
    
          x.compare!
        end
    
    Result (Ruby 2.2.2):
    
        Calculating -------------------------------------
                       match    70.324k i/100ms
                  start_with   111.264k i/100ms
        -------------------------------------------------
                       match      1.468M (± 7.1%) i/s -      7.314M
                  start_with      3.787M (± 3.5%) i/s -     18.915M
    
        Comparison:
                  start_with:  3787389.4 i/s
                       match:  1467636.4 i/s - 2.58x slower
    
        Calculating -------------------------------------
                       match    36.694k i/100ms
                  start_with    86.071k i/100ms
        -------------------------------------------------
                       match    532.795k (± 4.7%) i/s -      2.679M
                  start_with      2.518M (± 5.8%) i/s -     12.566M
    
        Comparison:
                  start_with:  2518366.8 i/s
                       match:   532794.5 i/s - 4.73x slower
    bquorning committed Aug 2, 2015
    Configuration menu
    Copy the full SHA
    113f8a6 View commit details
    Browse the repository at this point in the history