Files
once-campfire/bench
David Heinemeier Hansson 659f95748a Preload only uncached messages and reduce rendering overhead (#292)
* Preload only uncached messages and reduce rendering overhead

* Keep benchmark summaries without raw JSON results

* Use Ruby benchmark drivers and keep generated results out of the repo
2026-10-04 12:36:36 -04:00
..

Message benchmarks

The drivers use Ruby's standard library and Docker; no separate load generator is required. Provide a frozen baseline source directory, an isolated seed containing db/, storage/ and labels.json, and a matching application image with compiled assets.

ruby bench/compare_message_hot_paths.rb --baseline PATH --baseline-ref SHA --seed SEED
ruby bench/compare_http.rb --baseline PATH --seed SEED
ruby bench/compare_http.rb --baseline PATH --seed SEED --paths sidebar,search --concurrencies 16 --duration 10

Both drivers alternate before/after order and reset fixture storage for each run. Results default to ignored tmp/rails-optimization/results/; override with --output PATH. Use --image to override campfire-reference:app, and --cpus to override server CPUs 8-11. HTTP clients use CPUs 12-15 by default (--client-cpus). --help lists options.

The rendering probe checks exact response bodies, selected headers and unread payloads, and records timing, queries and allocations with MemoryStore, frozen time and fixture-only CSRF disabling. Unread fanout excludes adapter I/O.

The HTTP driver uses production Puma/Redis with one worker and five threads. Ruby threads each maintain a keep-alive connection, request uncompressed responses, and consume the whole body. Login uses normal CSRF protection; all warmup and measured responses must be HTTP 200 without transport errors. Measurements exclude Thruster, TLS and gzip. Client CPU, JIT warmup and GC can affect throughput; repeat runs and check client saturation.