csv icon indicating copy to clipboard operation
csv copied to clipboard

Save @parse_method for faster access

Open marshall-lee opened this issue 1 year ago • 0 comments

On some benchmarks it seems to make a difference:

  • quoted from benchmark/parse.yaml
  • quote_char_nil from benchmark/parse_quote_char_nil.yaml
N_ROWS=5000 rake benchmark:parse benchmark:parse_liberal_parsing benchmark:parse_quote_char_nil benchmark:parse_strip
RUBYLIB= BUNDLER_ORIG_RUBYLIB= /Users/vladimirkochnev/.asdf/installs/ruby/3.3.3/bin/ruby -v -S benchmark-driver /Users/vladimirkochnev/code/csv/benchmark/parse.yaml
ruby 3.3.3 (2024-06-12 revision f1c7b6f435) [arm64-darwin23]
Calculating -------------------------------------
                      csv 3.3.0      master
            unquoted     22.121      22.176 i/s -     100.000 times in 4.520619s 4.509361s
              quoted     11.449      12.709 i/s -     100.000 times in 8.734424s 7.868440s
               mixed     13.733      14.086 i/s -     100.000 times in 7.281701s 7.099278s
     include_col_sep      5.149       5.157 i/s -     100.000 times in 19.422614s 19.391167s
     include_row_sep      5.085       5.191 i/s -     100.000 times in 19.665228s 19.264772s
        encode_utf-8     15.954      16.134 i/s -     100.000 times in 6.267920s 6.198095s
         encode_sjis     16.525      16.279 i/s -     100.000 times in 6.051581s 6.142967s

Comparison:
                         unquoted
              master:        22.2 i/s
           csv 3.3.0:        22.1 i/s - 1.00x  slower

                           quoted
              master:        12.7 i/s
           csv 3.3.0:        11.4 i/s - 1.11x  slower

                            mixed
              master:        14.1 i/s
           csv 3.3.0:        13.7 i/s - 1.03x  slower

                  include_col_sep
              master:         5.2 i/s
           csv 3.3.0:         5.1 i/s - 1.00x  slower

                  include_row_sep
              master:         5.2 i/s
           csv 3.3.0:         5.1 i/s - 1.02x  slower

                     encode_utf-8
              master:        16.1 i/s
           csv 3.3.0:        16.0 i/s - 1.01x  slower

                      encode_sjis
           csv 3.3.0:        16.5 i/s
              master:        16.3 i/s - 1.02x  slower

RUBYLIB= BUNDLER_ORIG_RUBYLIB= /Users/vladimirkochnev/.asdf/installs/ruby/3.3.3/bin/ruby -v -S benchmark-driver /Users/vladimirkochnev/code/csv/benchmark/parse_liberal_parsing.yaml
ruby 3.3.3 (2024-06-12 revision f1c7b6f435) [arm64-darwin23]
Calculating -------------------------------------
                                   csv 3.3.0      master
                         unquoted      8.152       8.035 i/s -     100.000 times in 12.266633s 12.445189s
         unquoted_backslash_quote      3.834       3.847 i/s -     100.000 times in 26.082500s 25.994618s
                           quoted      3.604       3.599 i/s -     100.000 times in 27.744279s 27.787045s
quoted_double_quote_outside_quote      2.248       2.227 i/s -     100.000 times in 44.486324s 44.911118s
           quoted_backslash_quote      1.774       1.782 i/s -     100.000 times in 56.372575s 56.103198s
                  include_col_sep      3.600       3.602 i/s -     100.000 times in 27.775529s 27.759234s
                  include_row_sep      3.569       3.592 i/s -     100.000 times in 28.019030s 27.838529s
                     encode_utf-8      8.104       8.008 i/s -     100.000 times in 12.339020s 12.486872s
                      encode_sjis      8.461       8.277 i/s -     100.000 times in 11.818396s 12.081458s

Comparison:
                                      unquoted
                        csv 3.3.0:         8.2 i/s
                           master:         8.0 i/s - 1.01x  slower

                      unquoted_backslash_quote
                           master:         3.8 i/s
                        csv 3.3.0:         3.8 i/s - 1.00x  slower

                                        quoted
                        csv 3.3.0:         3.6 i/s
                           master:         3.6 i/s - 1.00x  slower

             quoted_double_quote_outside_quote
                        csv 3.3.0:         2.2 i/s
                           master:         2.2 i/s - 1.01x  slower

                        quoted_backslash_quote
                           master:         1.8 i/s
                        csv 3.3.0:         1.8 i/s - 1.00x  slower

                               include_col_sep
                           master:         3.6 i/s
                        csv 3.3.0:         3.6 i/s - 1.00x  slower

                               include_row_sep
                           master:         3.6 i/s
                        csv 3.3.0:         3.6 i/s - 1.01x  slower

                                  encode_utf-8
                        csv 3.3.0:         8.1 i/s
                           master:         8.0 i/s - 1.01x  slower

                                   encode_sjis
                        csv 3.3.0:         8.5 i/s
                           master:         8.3 i/s - 1.02x  slower

RUBYLIB= BUNDLER_ORIG_RUBYLIB= /Users/vladimirkochnev/.asdf/installs/ruby/3.3.3/bin/ruby -v -S benchmark-driver /Users/vladimirkochnev/code/csv/benchmark/parse_quote_char_nil.yaml
ruby 3.3.3 (2024-06-12 revision f1c7b6f435) [arm64-darwin23]
Calculating -------------------------------------
                      csv 3.3.0      master
  without_quote_char     22.291      22.468 i/s -     100.000 times in 4.486160s 4.450730s
      quote_char_nil     32.097      43.310 i/s -     100.000 times in 3.115538s 2.308916s
       col_sep_space     11.969      12.007 i/s -     100.000 times in 8.355107s 8.328530s

Comparison:
               without_quote_char
              master:        22.5 i/s
           csv 3.3.0:        22.3 i/s - 1.01x  slower

                   quote_char_nil
              master:        43.3 i/s
           csv 3.3.0:        32.1 i/s - 1.35x  slower

                    col_sep_space
              master:        12.0 i/s
           csv 3.3.0:        12.0 i/s - 1.00x  slower

RUBYLIB= BUNDLER_ORIG_RUBYLIB= /Users/vladimirkochnev/.asdf/installs/ruby/3.3.3/bin/ruby -v -S benchmark-driver /Users/vladimirkochnev/code/csv/benchmark/parse_strip.yaml
ruby 3.3.3 (2024-06-12 revision f1c7b6f435) [arm64-darwin23]
Calculating -------------------------------------
                      csv 3.3.0      master
             default     12.810      12.927 i/s -     100.000 times in 7.806406s 7.735908s
      no_quote_strip      8.933       8.910 i/s -     100.000 times in 11.194571s 11.223611s

Comparison:
                          default
              master:        12.9 i/s
           csv 3.3.0:        12.8 i/s - 1.01x  slower

                   no_quote_strip
           csv 3.3.0:         8.9 i/s
              master:         8.9 i/s - 1.00x  slower

marshall-lee avatar Jul 04 '24 14:07 marshall-lee