/rails_compojure

Ruby on Rails vs Compojure Benchmark

Primary LanguageRuby

Ruby on Rails vs Compojure Benchmark

Setup

Install Leiningen.

Install Bundler and gems:

gem install bundler
gem install benchmark-ips
cd rails_app && bundle

Install PostgreSQL and run:

psql -U postgres -f provision_database.sql

Running

Run 4 servers:

# port 8000
cd compojure_app && lein with-profile production trampoline run -m compojure_app.handler aleph

# port 5000
cd compojure_app && lein with-profile production trampoline run -m compojure_app.handler

# port 3000
cd compojure_app && lein with-profile production trampoline ring server-headless

# port 3001
cd rails_app && RAILS_ENV=production bundle exec rails s -p 3001

Run benchmark script:

ruby benchmark.rb

Results of the first time run test:

Comparison:

Compojure - Aleph server:       20.0 i/s
Compojure - Http-kit server:       19.9 i/s - 1.01x slower
   Ruby on Rails:       19.8 i/s - 1.01x slower
Compojure - Ring-Jetty server:       19.2 i/s - 1.04x slower

Results after 5 iterations to warmup JIT Compilation of Clojure implementation:

Comparison:

Compojure - Http-kit server:       24.7 i/s
Compojure - Aleph server:       23.2 i/s - 1.06x slower
Compojure - Ring-Jetty server:       23.1 i/s - 1.07x slower
   Ruby on Rails:       19.3 i/s - 1.28x slower

Run benchmark script for http-stack only:

ruby benchmark-http-stack.rb

Results after JIT Compilation:

Comparison:

Compojure - Http-kit server:      102.8 i/s
Compojure - Ring-Jetty server:       97.5 i/s - 1.05x slower
Compojure - Aleph server:       96.4 i/s - 1.07x slower
   Ruby On Rails:       66.4 i/s - 1.55x slower

Hardware:

Intel Core i5 2450M 2.50 GHz, 16 Gb RAM, SSD