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.
Milliseconds per iteration of the frozen 114-visit sequence — lower is better. The whisker spans each stack's min–max across its timed iterations.
3.03× faster than Rails — 300.7 ms/iter vs Rails' 911.3 ms/iter.
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.
| endpoint | rails ms | roundhouse ms | ratio | visits/iter |
|---|---|---|---|---|
/hottest | 29.02 | 16.47 | 1.76× | 2 |
/rss | 24.97 | 16.09 | 1.55× | 4 |
/newest | 22.86 | 4.79 | 4.77× | 5 |
/threads | 22.45 | 5.19 | 4.32× | 3 |
/threads/:username | 17.09 | 4.17 | 4.10× | 2 |
/comments | 13.63 | 13.28 | 1.03× | 4 |
/recent | 12.48 | 6.08 | 2.05× | 2 |
/s/:story_id | 9.95 | 1.79 | 5.57× | 15 |
/saved | 6.05 | 0.68 | 8.87× | 5 |
/active | 5.20 | 1.89 | 2.74× | 6 |
/u/:username | 5.08 | 1.03 | 4.96× | 6 |
/settings | 4.85 | 0.42 | 11.52× | 3 |
/top?length=1w | 4.57 | 1.62 | 2.82× | 2 |
/top?length=1d | 4.44 | 1.59 | 2.79× | 4 |
/top?length=1y | 4.27 | 1.40 | 3.05× | 2 |
/hidden | 3.23 | 0.35 | 9.32× | 4 |
/upvoted/stories | 3.11 | 0.35 | 8.96× | 6 |
/u | 3.09 | 0.53 | 5.79× | 15 |
/upvoted/comments | 3.08 | 0.44 | 6.95× | 3 |
/replies/unread | 2.88 | 0.37 | 7.78× | 7 |
/comments/:comment_id/reply | 2.81 | 0.40 | 6.98× | 5 |
/replies/comments | 2.80 | 0.36 | 7.86× | 3 |
/replies/stories | 2.78 | 0.36 | 7.70× | 2 |
/replies | 2.74 | 0.38 | 7.27× | 3 |
/about | 1.86 | 0.37 | 5.04× | 1 |
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.
Every distinct benchmark route, replayed once. Bars are log-scaled single-shot latency; all routes return 200.
| route | status | bytes | ms |
|---|---|---|---|
/u | 200 | 292,449 | 31.08 |
/active | 200 | 2,497 | 4.01 |
/newest | 200 | 64,185 | 6.41 |
/recent | 200 | 2,724 | 6.49 |
/hottest | 200 | 16,369 | 16.61 |
/rss | 200 | 16,942 | 16.67 |
/privacy | 200 | 2,409 | 0.83 |
/about | 200 | 2,282 | 0.41 |
/settings | 200 | 15,132 | 1.69 |
/top?length=1d | 200 | 2,626 | 1.60 |
/top?length=1w | 200 | 2,629 | 1.38 |
/top?length=1y | 200 | 2,629 | 1.39 |
/hidden | 200 | 2,552 | 0.41 |
/saved | 200 | 5,207 | 0.92 |
/upvoted/stories | 200 | 2,725 | 0.41 |
/comments | 200 | 36,424 | 15.76 |
/upvoted/comments | 200 | 2,778 | 0.74 |
/threads | 200 | 60,822 | 6.47 |
/comments/6srqij/reply | 200 | 2,220 | 0.83 |
/threads/michell_wiegand | 200 | 60,831 | 5.03 |
/u/michell_wiegand | 200 | 4,263 | 1.49 |
/replies | 200 | 2,724 | 0.59 |
/replies/comments | 200 | 2,720 | 0.57 |
/replies/stories | 200 | 2,727 | 1.17 |
/replies/unread | 200 | 2,764 | 0.56 |
/s/enr7ye | 200 | 7,702 | 3.50 |
| command | scripts/bench-lobsters --vs-rails --time 10 |
|---|---|
| source | /home/rubys/ruby-bench/benchmarks/lobsters |
| commit | a657658a4620eb433e8794c6c4b81a3e96194e7c |
| captured | 2026-07-11T07:05:57Z |
| database | file:lobsters_bench?mode=memory&cache=shared |
| story / comment | enr7ye / 6srqij |
| roundhouse ruby | ruby 4.0.5 (2026-05-20 revision 64336ffd0e) +PRISM [x86_64-linux] |
|---|---|
| rails ruby | ruby 4.0.5 (2026-05-20 revision 64336ffd0e) +PRISM [x86_64-linux] |
| rails | 8.1.1 |
| visits/iter | 114 |
|---|---|
| warmup | 15 |
| roundhouse iters | 34 |
| rails iters | 11 |