Hi there, I propose to replace the use of the method *Range#include?* to normal compared with the beginning and end of the range. For example consider the actually used method <https://github.com/rails/rails/blob/master/activesupport/lib/active_support/inflector/methods.rb#L331> : (11..13).include?(abs_number % 100) and if we replace him to: modulo_number = abs_number % 100 modulo_number >= 0) && (modulo_number <= 1) it increase performance about 1.5 times.
This approach can be used in another real existing place <https://github.com/rails/rails/blob/master/railties/lib/rails/commands/dbconsole.rb#L42> . Below are the benchmarks data: Benchmark.ips do |x| x.report('old_slow') do abs_number = 1234 (11..13).include?(abs_number % 100) end x.report('new_fast') do abs_number = 1234 modulo_number = abs_number % 100 (modulo_number >= 0) && (modulo_number <= 1) end x.compare! end Warming up -------------------------------------- old_slow 257.215k i/100ms new_fast 334.191k i/100ms Calculating ------------------------------------- old_slow 5.628M (± 0.9%) i/s - 28.294M in 5.027572s new_fast 8.791M (± 0.9%) i/s - 44.113M in 5.018600s Comparison: new_fast: 8790704.5 i/s old_slow: 5628188.6 i/s - 1.56x slower Benchmark.ips do |x| x.report('old_slow') do x = 0 (0..1).include?(0) end x.report('new_fast') do x = 0 (x >= 0) && (x <= 1) end x.compare! end Warming up -------------------------------------- old_slow 283.858k i/100ms new_fast 367.498k i/100ms Calculating ------------------------------------- old_slow 6.133M (± 1.3%) i/s - 30.657M in 4.999708s new_fast 10.486M (± 1.6%) i/s - 52.552M in 5.012845s Comparison: new_fast: 10486347.5 i/s old_slow: 6132780.2 i/s - 1.71x slower What do you think about it? -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/rubyonrails-core. For more options, visit https://groups.google.com/d/optout.
