Skip to content

Instantly share code, notes, and snippets.

@vojtad
Created November 21, 2018 00:00
Show Gist options
  • Save vojtad/a82e844fd971abe98a0dfcf8cb6efd98 to your computer and use it in GitHub Desktop.
Save vojtad/a82e844fd971abe98a0dfcf8cb6efd98 to your computer and use it in GitHub Desktop.
Rails JSON rendering benchmarks

Rendered JSON is ~250 KB in size.

Runtime benchmarks

Warming up --------------------------------------
   render json: data    20.000  i/100ms
render json: data.to_json
                        27.000  i/100ms
render json: ActiveSupport::JSON.encode(data)
                        26.000  i/100ms
render json: JSON.dump(data)
                       235.000  i/100ms
render json: Oj.dump(data)
                       602.000  i/100ms
Calculating -------------------------------------
   render json: data    197.325  (± 9.6%) i/s -    980.000  in   5.019729s
render json: data.to_json
                        265.132  (± 7.5%) i/s -      1.323k in   5.023435s
render json: ActiveSupport::JSON.encode(data)
                        271.085  (± 4.8%) i/s -      1.352k in   5.000137s
render json: JSON.dump(data)
                          2.467k (±10.8%) i/s -     12.220k in   5.027728s
render json: Oj.dump(data)
                          6.190k (±15.3%) i/s -     30.100k in   5.016871s

Comparison:
render json: Oj.dump(data):     6189.7 i/s
render json: JSON.dump(data):     2467.3 i/s - 2.51x  slower
render json: ActiveSupport::JSON.encode(data):      271.1 i/s - 22.83x  slower
render json: data.to_json:      265.1 i/s - 23.35x  slower
   render json: data:      197.3 i/s - 31.37x  slower

Memory benchmarks

Calculating -------------------------------------
   render json: data   589.285k memsize (    64.664k retained)
                         8.504k objects (   735.000  retained)
                        50.000  strings (    50.000  retained)
render json: data.to_json
                       359.653k memsize (     1.128k retained)
                         7.783k objects (    13.000  retained)
                        50.000  strings (     1.000  retained)
render json: ActiveSupport::JSON.encode(data)
                       359.653k memsize (     1.128k retained)
                         7.783k objects (    13.000  retained)
                        50.000  strings (     1.000  retained)
render json: JSON.dump(data)
                        54.007k memsize (     1.128k retained)
                       813.000  objects (    13.000  retained)
                        50.000  strings (     1.000  retained)
render json: Oj.dump(data)
                        24.197k memsize (     1.128k retained)
                        73.000  objects (    13.000  retained)
                        17.000  strings (     1.000  retained)

Comparison:
render json: Oj.dump(data):      24197 allocated
render json: JSON.dump(data):      54007 allocated - 2.23x more
render json: data.to_json:     359653 allocated - 14.86x more
render json: ActiveSupport::JSON.encode(data):     359653 allocated - 14.86x more
   render json: data:     589285 allocated - 24.35x more
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment