Rails has added a benchmark generator


Rails added a new benchmark generator. This is used to create benchmark file that uses benchmark-ips.

To use the benchmark generator, run

rails generate benchmark my_benchmark

This creates a benchmark file script/benchmarks/my_benchmark.rb. It also adds benchmark-ips gem to Gemfile. Be default, it adds 2 blocks for reporting before and after that can be used for benchmarking.

The file content looks like following:

# frozen_string_literal: true

require_relative "../../config/environment"

# Any benchmarking setup goes here...



Benchmark.ips do |x|
  x.report("before") { }
  x.report("after") { }

  x.compare!
end

This benchmark can be run using following command:

ruby script/benchmarks/my_benchmark.rb

Since we load config/environment.rb file, the Rails application environment is available to us in the script. The script runs in development environment.

We can pass different reports to add to benchmark as arguments to generate command as follows:

rails generate benchmark my_benchmark_2 report1 report2 report3

This will generate benchmark file as following:

# frozen_string_literal: true

require_relative "../config/environment"

# Any benchmarking setup goes here...



Benchmark.ips do |x|
  x.report("report1") { }
  x.report("report2") { }
  x.report("report3") { }

  x.compare!
end

The main purpose of adding the generator is it provides a convenient way to setup and perform benchmarks using the benchmark-ips gem.

Also since it generates and puts the files in script/benchmarks folder it automatically sets a standard approach to place the benchmark files in the Rails application.