Lobsters benchmark results

Run lobsters · 2026-07-11T07:06:28Z · a657658a4620
26/26 routes return 2003.03× faster than Rails
Artifacts: summary.json · summary.md · rails.json · sequence.json · env.json
Methodology. The route table replays each distinct lobsters route once against the Roundhouse emit and records status, response bytes, and single-shot latency. The stability and comparison numbers replay a frozen 114-visit sequence (versioned at bench/lobsters/frozen-sequence.json) so every run — and the Rails baseline — walks the identical path. Both stacks serve from an in-memory SQLite seeded at boot (file:lobsters_bench?mode=memory&cache=shared), the shape the ruby-bench lobsters benchmark runs. Median of the timed iterations is reported.

This measures one specific reference app (the ruby-bench lobsters fixture), not arbitrary Rails workloads. The Rails baseline runs the real Rails lobsters over the same sequence; the roundhouse cell serves the same routes from the Roundhouse-emitted framework.

1. Roundhouse vs Rails

Milliseconds per iteration of the frozen 114-visit sequence — lower is better. The whisker spans each stack's min–max across its timed iterations.

rails 8.1.1911.3 msn=11roundhouse300.7 msn=34

3.03× faster than Rails — 300.7 ms/iter vs Rails' 911.3 ms/iter.

2. Per-endpoint breakdown

Where the overall 3.03× win comes from — each endpoint's median latency over every timed visit of the frozen sequence, Rails vs roundhouse. Bars are log-scaled; the ratio at the right is Rails ÷ roundhouse (green = roundhouse faster).

A diagnostic breakdown, not a re-derivation: per-endpoint medians don't sum to the sequence median (GC and ordering don't decompose linearly), and the sub-millisecond rows sit near clock resolution — trust the ranking, not the third decimal.

railsroundhouse0110100ms/hottest1.8×/rss1.6×/newest4.8×/threads4.3×/threads/:username4.1×/comments1.0×/recent2.1×/s/:story_id5.6×/saved8.9×/active2.7×/u/:username5.0×/settings11.5×/top?length=1w2.8×/top?length=1d2.8×/top?length=1y3.0×/hidden9.3×/upvoted/stories9.0×/u5.8×/upvoted/comments6.9×/replies/unread7.8×/comments/:comment_id/reply7.0×/replies/comments7.9×/replies/stories7.7×/replies7.3×/about5.0×
Per-endpoint table (25 endpoints)
endpointrails msroundhouse msratiovisits/iter
/hottest29.0216.471.76×2
/rss24.9716.091.55×4
/newest22.864.794.77×5
/threads22.455.194.32×3
/threads/:username17.094.174.10×2
/comments13.6313.281.03×4
/recent12.486.082.05×2
/s/:story_id9.951.795.57×15
/saved6.050.688.87×5
/active5.201.892.74×6
/u/:username5.081.034.96×6
/settings4.850.4211.52×3
/top?length=1w4.571.622.82×2
/top?length=1d4.441.592.79×4
/top?length=1y4.271.403.05×2
/hidden3.230.359.32×4
/upvoted/stories3.110.358.96×6
/u3.090.535.79×15
/upvoted/comments3.080.446.95×3
/replies/unread2.880.377.78×7
/comments/:comment_id/reply2.810.406.98×5
/replies/comments2.800.367.86×3
/replies/stories2.780.367.70×2
/replies2.740.387.27×3
/about1.860.375.04×1

3. Frozen-sequence stability

300.7 ms/iter median over 34 iterations (min 297.7, max 308.7, 15 warmup). Each column is one timed iteration; the dashed line is the median.

298301309iteration 1iteration 34

4. Route parity (26/26)

Every distinct benchmark route, replayed once. Bars are log-scaled single-shot latency; all routes return 200.

0110100ms/u31.1 ms/rss16.7 ms/hottest16.6 ms/comments15.8 ms/recent6.5 ms/threads6.5 ms/newest6.4 ms/threads/michell_wiegand5.0 ms/active4.0 ms/s/enr7ye3.5 ms/settings1.7 ms/top?length=1d1.6 ms/u/michell_wiegand1.5 ms/top?length=1y1.4 ms/top?length=1w1.4 ms/replies/stories1.2 ms/saved0.9 ms/comments/6srqij/reply0.8 ms/privacy0.8 ms/upvoted/comments0.7 ms/replies0.6 ms/replies/comments0.6 ms/replies/unread0.6 ms/hidden0.4 ms/upvoted/stories0.4 ms/about0.4 ms
Per-route table (26 routes)
routestatusbytesms
/u200292,44931.08
/active2002,4974.01
/newest20064,1856.41
/recent2002,7246.49
/hottest20016,36916.61
/rss20016,94216.67
/privacy2002,4090.83
/about2002,2820.41
/settings20015,1321.69
/top?length=1d2002,6261.60
/top?length=1w2002,6291.38
/top?length=1y2002,6291.39
/hidden2002,5520.41
/saved2005,2070.92
/upvoted/stories2002,7250.41
/comments20036,42415.76
/upvoted/comments2002,7780.74
/threads20060,8226.47
/comments/6srqij/reply2002,2200.83
/threads/michell_wiegand20060,8315.03
/u/michell_wiegand2004,2631.49
/replies2002,7240.59
/replies/comments2002,7200.57
/replies/stories2002,7271.17
/replies/unread2002,7640.56
/s/enr7ye2007,7023.50
Environment

Run

commandscripts/bench-lobsters --vs-rails --time 10
source/home/rubys/ruby-bench/benchmarks/lobsters
commita657658a4620eb433e8794c6c4b81a3e96194e7c
captured2026-07-11T07:05:57Z
databasefile:lobsters_bench?mode=memory&cache=shared
story / commentenr7ye / 6srqij

Stacks

roundhouse rubyruby 4.0.5 (2026-05-20 revision 64336ffd0e) +PRISM [x86_64-linux]
rails rubyruby 4.0.5 (2026-05-20 revision 64336ffd0e) +PRISM [x86_64-linux]
rails8.1.1

Sequence

visits/iter114
warmup15
roundhouse iters34
rails iters11

Generated 2026-07-11T16:43:09Z from summary.json.