Skip to content

Commit

Permalink
update benches to use new AR code
Browse files Browse the repository at this point in the history
  • Loading branch information
ken3ypa committed Aug 12, 2023
1 parent d169558 commit a110e1c
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 147 deletions.
117 changes: 50 additions & 67 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,100 +20,83 @@ About 1.2–20x faster than Active Support on my machine (your mileage my vary,
$ bundle exec ./benchmark
================== Test String Length: 0 ==================
Warming up --------------------------------------
Fast Blank 2.606M i/100ms
Slow Blank 321.154k i/100ms
New Slow Blank 2.578M i/100ms
Calculating -------------------------------------
Fast Blank 225.251k i/100ms
Fast ActiveSupport 225.676k i/100ms
Slow Blank 110.934k i/100ms
New Slow Blank 221.792k i/100ms
-------------------------------------------------
Fast Blank 29.673M (± 2.7%) i/s - 148.215M
Fast ActiveSupport 28.249M (± 3.5%) i/s - 141.048M
Slow Blank 2.158M (± 3.3%) i/s - 10.872M
New Slow Blank 23.558M (± 3.2%) i/s - 117.772M
Fast Blank 25.958M (± 1.3%) i/s - 130.306M in 5.020836s
Slow Blank 3.211M (± 1.2%) i/s - 16.058M in 5.001361s
New Slow Blank 25.782M (± 1.0%) i/s - 131.455M in 5.099339s
Comparison:
Fast Blank: 29673200.1 i/s
Fast ActiveSupport: 28248894.5 i/s - 1.05x slower
New Slow Blank: 23557900.0 i/s - 1.26x slower
Slow Blank: 2157787.7 i/s - 13.75x slower
Fast Blank: 25957916.8 i/s
New Slow Blank: 25781625.3 i/s - same-ish: difference falls within error
Slow Blank: 3211099.5 i/s - 8.08x slower
================== Test String Length: 6 ==================
Warming up --------------------------------------
Fast Blank 836.278k i/100ms
Slow Blank 291.197k i/100ms
New Slow Blank 653.098k i/100ms
Calculating -------------------------------------
Fast Blank 201.185k i/100ms
Fast ActiveSupport 205.076k i/100ms
Slow Blank 102.061k i/100ms
New Slow Blank 123.087k i/100ms
-------------------------------------------------
Fast Blank 13.894M (± 2.3%) i/s - 69.409M
Fast ActiveSupport 14.627M (± 3.5%) i/s - 73.212M
Slow Blank 1.943M (± 2.3%) i/s - 9.798M
New Slow Blank 2.796M (± 1.8%) i/s - 14.032M
Fast Blank 8.530M (± 1.0%) i/s - 42.650M in 5.000630s
Slow Blank 2.918M (± 1.2%) i/s - 14.851M in 5.090626s
New Slow Blank 6.469M (± 1.9%) i/s - 32.655M in 5.049956s
Comparison:
Fast ActiveSupport: 14627063.7 i/s
Fast Blank: 13893631.2 i/s - 1.05x slower
New Slow Blank: 2795783.3 i/s - 5.23x slower
Slow Blank: 1943025.9 i/s - 7.53x slower
Fast Blank: 8529763.5 i/s
New Slow Blank: 6469009.8 i/s - 1.32x slower
Slow Blank: 2917763.7 i/s - 2.92x slower
================== Test String Length: 14 ==================
Warming up --------------------------------------
Fast Blank 929.658k i/100ms
Slow Blank 612.409k i/100ms
New Slow Blank 298.116k i/100ms
Calculating -------------------------------------
Fast Blank 220.004k i/100ms
Fast ActiveSupport 219.716k i/100ms
Slow Blank 147.399k i/100ms
New Slow Blank 106.651k i/100ms
-------------------------------------------------
Fast Blank 24.949M (± 3.0%) i/s - 124.742M
Fast ActiveSupport 24.491M (± 3.3%) i/s - 122.382M
Slow Blank 4.292M (± 1.6%) i/s - 21.520M
New Slow Blank 2.115M (± 2.4%) i/s - 10.665M
Fast Blank 9.327M (± 1.0%) i/s - 47.413M in 5.084140s
Slow Blank 6.160M (± 1.1%) i/s - 31.233M in 5.070472s
New Slow Blank 2.966M (± 1.4%) i/s - 14.906M in 5.027239s
Comparison:
Fast Blank: 24948558.8 i/s
Fast ActiveSupport: 24491245.1 i/s - 1.02x slower
Slow Blank: 4292490.5 i/s - 5.81x slower
New Slow Blank: 2115097.6 i/s - 11.80x slower
Fast Blank: 9326524.0 i/s
Slow Blank: 6160475.8 i/s - 1.51x slower
New Slow Blank: 2965554.6 i/s - 3.14x slower
================== Test String Length: 24 ==================
Warming up --------------------------------------
Fast Blank 783.665k i/100ms
Slow Blank 555.975k i/100ms
New Slow Blank 323.808k i/100ms
Calculating -------------------------------------
Fast Blank 206.555k i/100ms
Fast ActiveSupport 208.513k i/100ms
Slow Blank 137.733k i/100ms
New Slow Blank 101.215k i/100ms
-------------------------------------------------
Fast Blank 16.761M (± 2.7%) i/s - 83.861M
Fast ActiveSupport 17.710M (± 3.2%) i/s - 88.618M
Slow Blank 3.744M (± 2.0%) i/s - 18.732M
New Slow Blank 1.962M (± 2.7%) i/s - 9.818M
Fast Blank 7.827M (± 0.8%) i/s - 39.183M in 5.006452s
Slow Blank 5.540M (± 1.0%) i/s - 27.799M in 5.018209s
New Slow Blank 3.182M (± 1.9%) i/s - 16.190M in 5.090652s
Comparison:
Fast ActiveSupport: 17709936.5 i/s
Fast Blank: 16760839.7 i/s - 1.06x slower
Slow Blank: 3744048.4 i/s - 4.73x slower
New Slow Blank: 1961831.1 i/s - 9.03x slower
Fast Blank: 7827079.9 i/s
Slow Blank: 5540093.2 i/s - 1.41x slower
New Slow Blank: 3181588.3 i/s - 2.46x slower
================== Test String Length: 136 ==================
Warming up --------------------------------------
Fast Blank 776.064k i/100ms
Slow Blank 545.112k i/100ms
New Slow Blank 312.395k i/100ms
Calculating -------------------------------------
Fast Blank 201.772k i/100ms
Fast ActiveSupport 189.120k i/100ms
Slow Blank 129.439k i/100ms
New Slow Blank 90.677k i/100ms
-------------------------------------------------
Fast Blank 16.718M (± 2.8%) i/s - 83.534M
Fast ActiveSupport 17.617M (± 3.6%) i/s - 87.941M
Slow Blank 3.725M (± 3.0%) i/s - 18.639M
New Slow Blank 1.940M (± 4.8%) i/s - 9.702M
Fast Blank 7.775M (± 1.8%) i/s - 39.579M in 5.092430s
Slow Blank 5.532M (± 1.0%) i/s - 27.801M in 5.025544s
New Slow Blank 3.227M (± 1.4%) i/s - 16.245M in 5.035459s
Comparison:
Fast ActiveSupport: 17616782.1 i/s
Fast Blank: 16718307.8 i/s - 1.05x slower
Slow Blank: 3725097.6 i/s - 4.73x slower
New Slow Blank: 1940271.2 i/s - 9.08x slower
Fast Blank: 7775107.9 i/s
Slow Blank: 5532395.5 i/s - 1.41x slower
New Slow Blank: 3226677.2 i/s - 2.41x slower
```

Additionally, this gem allocates no strings during the test, making it less of a GC burden.
Expand Down
145 changes: 65 additions & 80 deletions benchmark
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ require 'benchmark/ips'
require 'fast_blank'

class String
BLANK_RE = /\A[[:space:]]*\z/
# active support implementation
def slow_blank?
/\A[[:space:]]*\z/ === self
end

def new_slow_blank?
empty? || !(/[[:^space:]]/ === self)
empty? || BLANK_RE.match?(self)
end
end

Expand Down Expand Up @@ -71,96 +72,80 @@ test_strings.each do |s|
end

# ================== Test String Length: 0 ==================
# Warming up --------------------------------------
# Fast Blank 2.606M i/100ms
# Slow Blank 321.154k i/100ms
# New Slow Blank 2.578M i/100ms
# Calculating -------------------------------------
# Fast Blank 225.251k i/100ms
# Fast ActiveSupport 225.676k i/100ms
# Slow Blank 110.934k i/100ms
# New Slow Blank 221.792k i/100ms
# -------------------------------------------------
# Fast Blank 29.673M (± 2.7%) i/s - 148.215M
# Fast ActiveSupport 28.249M (± 3.5%) i/s - 141.048M
# Slow Blank 2.158M (± 3.3%) i/s - 10.872M
# New Slow Blank 23.558M (± 3.2%) i/s - 117.772M
#
# Fast Blank 25.958M (± 1.3%) i/s - 130.306M in 5.020836s
# Slow Blank 3.211M (± 1.2%) i/s - 16.058M in 5.001361s
# New Slow Blank 25.782M (± 1.0%) i/s - 131.455M in 5.099339s

# Comparison:
# Fast Blank: 29673200.1 i/s
# Fast ActiveSupport: 28248894.5 i/s - 1.05x slower
# New Slow Blank: 23557900.0 i/s - 1.26x slower
# Slow Blank: 2157787.7 i/s - 13.75x slower
#
#
# Fast Blank: 25957916.8 i/s
# New Slow Blank: 25781625.3 i/s - same-ish: difference falls within error
# Slow Blank: 3211099.5 i/s - 8.08x slower


# ================== Test String Length: 6 ==================
# Warming up --------------------------------------
# Fast Blank 836.278k i/100ms
# Slow Blank 291.197k i/100ms
# New Slow Blank 653.098k i/100ms
# Calculating -------------------------------------
# Fast Blank 201.185k i/100ms
# Fast ActiveSupport 205.076k i/100ms
# Slow Blank 102.061k i/100ms
# New Slow Blank 123.087k i/100ms
# -------------------------------------------------
# Fast Blank 13.894M (± 2.3%) i/s - 69.409M
# Fast ActiveSupport 14.627M (± 3.5%) i/s - 73.212M
# Slow Blank 1.943M (± 2.3%) i/s - 9.798M
# New Slow Blank 2.796M (± 1.8%) i/s - 14.032M
#
# Fast Blank 8.530M (± 1.0%) i/s - 42.650M in 5.000630s
# Slow Blank 2.918M (± 1.2%) i/s - 14.851M in 5.090626s
# New Slow Blank 6.469M (± 1.9%) i/s - 32.655M in 5.049956s

# Comparison:
# Fast ActiveSupport: 14627063.7 i/s
# Fast Blank: 13893631.2 i/s - 1.05x slower
# New Slow Blank: 2795783.3 i/s - 5.23x slower
# Slow Blank: 1943025.9 i/s - 7.53x slower
#
#
# Fast Blank: 8529763.5 i/s
# New Slow Blank: 6469009.8 i/s - 1.32x slower
# Slow Blank: 2917763.7 i/s - 2.92x slower


# ================== Test String Length: 14 ==================
# Warming up --------------------------------------
# Fast Blank 929.658k i/100ms
# Slow Blank 612.409k i/100ms
# New Slow Blank 298.116k i/100ms
# Calculating -------------------------------------
# Fast Blank 220.004k i/100ms
# Fast ActiveSupport 219.716k i/100ms
# Slow Blank 147.399k i/100ms
# New Slow Blank 106.651k i/100ms
# -------------------------------------------------
# Fast Blank 24.949M (± 3.0%) i/s - 124.742M
# Fast ActiveSupport 24.491M (± 3.3%) i/s - 122.382M
# Slow Blank 4.292M (± 1.6%) i/s - 21.520M
# New Slow Blank 2.115M (± 2.4%) i/s - 10.665M
#
# Fast Blank 9.327M (± 1.0%) i/s - 47.413M in 5.084140s
# Slow Blank 6.160M (± 1.1%) i/s - 31.233M in 5.070472s
# New Slow Blank 2.966M (± 1.4%) i/s - 14.906M in 5.027239s

# Comparison:
# Fast Blank: 24948558.8 i/s
# Fast ActiveSupport: 24491245.1 i/s - 1.02x slower
# Slow Blank: 4292490.5 i/s - 5.81x slower
# New Slow Blank: 2115097.6 i/s - 11.80x slower
#
#
# Fast Blank: 9326524.0 i/s
# Slow Blank: 6160475.8 i/s - 1.51x slower
# New Slow Blank: 2965554.6 i/s - 3.14x slower


# ================== Test String Length: 24 ==================
# Warming up --------------------------------------
# Fast Blank 783.665k i/100ms
# Slow Blank 555.975k i/100ms
# New Slow Blank 323.808k i/100ms
# Calculating -------------------------------------
# Fast Blank 206.555k i/100ms
# Fast ActiveSupport 208.513k i/100ms
# Slow Blank 137.733k i/100ms
# New Slow Blank 101.215k i/100ms
# -------------------------------------------------
# Fast Blank 16.761M (± 2.7%) i/s - 83.861M
# Fast ActiveSupport 17.710M (± 3.2%) i/s - 88.618M
# Slow Blank 3.744M (± 2.0%) i/s - 18.732M
# New Slow Blank 1.962M (± 2.7%) i/s - 9.818M
#
# Fast Blank 7.827M (± 0.8%) i/s - 39.183M in 5.006452s
# Slow Blank 5.540M (± 1.0%) i/s - 27.799M in 5.018209s
# New Slow Blank 3.182M (± 1.9%) i/s - 16.190M in 5.090652s

# Comparison:
# Fast ActiveSupport: 17709936.5 i/s
# Fast Blank: 16760839.7 i/s - 1.06x slower
# Slow Blank: 3744048.4 i/s - 4.73x slower
# New Slow Blank: 1961831.1 i/s - 9.03x slower
#
#
# Fast Blank: 7827079.9 i/s
# Slow Blank: 5540093.2 i/s - 1.41x slower
# New Slow Blank: 3181588.3 i/s - 2.46x slower


# ================== Test String Length: 136 ==================
# Warming up --------------------------------------
# Fast Blank 776.064k i/100ms
# Slow Blank 545.112k i/100ms
# New Slow Blank 312.395k i/100ms
# Calculating -------------------------------------
# Fast Blank 201.772k i/100ms
# Fast ActiveSupport 189.120k i/100ms
# Slow Blank 129.439k i/100ms
# New Slow Blank 90.677k i/100ms
# -------------------------------------------------
# Fast Blank 16.718M (± 2.8%) i/s - 83.534M
# Fast ActiveSupport 17.617M (± 3.6%) i/s - 87.941M
# Slow Blank 3.725M (± 3.0%) i/s - 18.639M
# New Slow Blank 1.940M (± 4.8%) i/s - 9.702M
#
# Fast Blank 7.775M (± 1.8%) i/s - 39.579M in 5.092430s
# Slow Blank 5.532M (± 1.0%) i/s - 27.801M in 5.025544s
# New Slow Blank 3.227M (± 1.4%) i/s - 16.245M in 5.035459s

# Comparison:
# Fast ActiveSupport: 17616782.1 i/s
# Fast Blank: 16718307.8 i/s - 1.05x slower
# Slow Blank: 3725097.6 i/s - 4.73x slower
# New Slow Blank: 1940271.2 i/s - 9.08x slower
#
# Fast Blank: 7775107.9 i/s
# Slow Blank: 5532395.5 i/s - 1.41x slower
# New Slow Blank: 3226677.2 i/s - 2.41x slower

0 comments on commit a110e1c

Please sign in to comment.