Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>When doing benchmarks, don't use <code>times</code>, because that creates a closure <code>RUN_COUNT</code> times. The extra time taken as a result affects all benchmarks equally in absolute terms, but that makes it harder to notice a relative difference:</p> <pre><code>require "benchmark" RUN_COUNT = 10_000_000 FIRST_STRING = "Woooooha" SECOND_STRING = "Woooooha" def times_eq_question_mark RUN_COUNT.times do |i| FIRST_STRING.eql?(SECOND_STRING) end end def times_double_equal_sign RUN_COUNT.times do |i| FIRST_STRING == SECOND_STRING end end def loop_eq_question_mark i = 0 while i &lt; RUN_COUNT FIRST_STRING.eql?(SECOND_STRING) i += 1 end end def loop_double_equal_sign i = 0 while i &lt; RUN_COUNT FIRST_STRING == SECOND_STRING i += 1 end end 1.upto(10) do |i| method_names = [:times_eq_question_mark, :times_double_equal_sign, :loop_eq_question_mark, :loop_double_equal_sign] method_times = method_names.map {|method_name| Benchmark.measure { send(method_name) } } puts "Run #{i}" method_names.zip(method_times).each do |method_name, method_time| puts [method_name, method_time].join("\t") end puts end </code></pre> <p>gives</p> <pre><code>Run 1 times_eq_question_mark 3.500000 0.000000 3.500000 ( 3.578011) times_double_equal_sign 2.390000 0.000000 2.390000 ( 2.453046) loop_eq_question_mark 3.110000 0.000000 3.110000 ( 3.140525) loop_double_equal_sign 2.109000 0.000000 2.109000 ( 2.124932) Run 2 times_eq_question_mark 3.531000 0.000000 3.531000 ( 3.562386) times_double_equal_sign 2.469000 0.000000 2.469000 ( 2.484295) loop_eq_question_mark 3.063000 0.000000 3.063000 ( 3.109276) loop_double_equal_sign 2.109000 0.000000 2.109000 ( 2.140556) Run 3 times_eq_question_mark 3.547000 0.000000 3.547000 ( 3.593635) times_double_equal_sign 2.437000 0.000000 2.437000 ( 2.453047) loop_eq_question_mark 3.063000 0.000000 3.063000 ( 3.109275) loop_double_equal_sign 2.140000 0.000000 2.140000 ( 2.140557) Run 4 times_eq_question_mark 3.547000 0.000000 3.547000 ( 3.578011) times_double_equal_sign 2.422000 0.000000 2.422000 ( 2.437422) loop_eq_question_mark 3.094000 0.000000 3.094000 ( 3.140524) loop_double_equal_sign 2.140000 0.000000 2.140000 ( 2.140557) Run 5 times_eq_question_mark 3.578000 0.000000 3.578000 ( 3.671758) times_double_equal_sign 2.406000 0.000000 2.406000 ( 2.468671) loop_eq_question_mark 3.110000 0.000000 3.110000 ( 3.156149) loop_double_equal_sign 2.109000 0.000000 2.109000 ( 2.156181) Run 6 times_eq_question_mark 3.562000 0.000000 3.562000 ( 3.562386) times_double_equal_sign 2.407000 0.000000 2.407000 ( 2.468671) loop_eq_question_mark 3.109000 0.000000 3.109000 ( 3.124900) loop_double_equal_sign 2.125000 0.000000 2.125000 ( 2.234303) Run 7 times_eq_question_mark 3.500000 0.000000 3.500000 ( 3.546762) times_double_equal_sign 2.453000 0.000000 2.453000 ( 2.468671) loop_eq_question_mark 3.031000 0.000000 3.031000 ( 3.171773) loop_double_equal_sign 2.157000 0.000000 2.157000 ( 2.156181) Run 8 times_eq_question_mark 3.468000 0.000000 3.468000 ( 3.656133) times_double_equal_sign 2.454000 0.000000 2.454000 ( 2.484296) loop_eq_question_mark 3.093000 0.000000 3.093000 ( 3.249896) loop_double_equal_sign 2.125000 0.000000 2.125000 ( 2.140556) Run 9 times_eq_question_mark 3.563000 0.000000 3.563000 ( 3.593635) times_double_equal_sign 2.453000 0.000000 2.453000 ( 2.453047) loop_eq_question_mark 3.125000 0.000000 3.125000 ( 3.124900) loop_double_equal_sign 2.141000 0.000000 2.141000 ( 2.156181) Run 10 times_eq_question_mark 3.515000 0.000000 3.515000 ( 3.562386) times_double_equal_sign 2.453000 0.000000 2.453000 ( 2.453046) loop_eq_question_mark 3.094000 0.000000 3.094000 ( 3.140525) loop_double_equal_sign 2.109000 0.000000 2.109000 ( 2.156181) </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload