mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-22 22:06:50 +00:00
```
$ bundle exec ruby benchmark.rb
-- create_table("comments", {:force=>:cascade})
-> 0.0066s
-- create_table("posts", {:force=>:cascade})
-> 0.0029s
-- create_table("users", {:force=>:cascade})
-> 0.0017s
Warming up --------------------------------------
ams 2.000 i/100ms
jsonapi-rb 7.000 i/100ms
ams eager 2.000 i/100ms
jsonapi-rb eager 12.000 i/100ms
Calculating -------------------------------------
ams 20.397 (± 1.7%) i/s - 204.000 in 10.097255s
jsonapi-rb 74.981 (± 0.8%) i/s - 756.000 in 10.100857s
ams eager 23.117 (± 0.6%) i/s - 232.000 in 10.047664s
jsonapi-rb eager 125.521 (± 0.8%) i/s - 1.260k in 10.054734s
with 95.0% confidence
Comparison:
jsonapi-rb eager: 125.5 i/s
jsonapi-rb : 75.0 i/s - 1.67x (± 0.02) slower
ams eager: 23.1 i/s - 5.43x (± 0.05) slower
ams : 20.4 i/s - 6.15x (± 0.12) slower
with 95.0% confidence
Calculating -------------------------------------
ams 2.688M memsize ( 188.498k retained)
33.331k objects ( 2.554k retained)
50.000 strings ( 50.000 retained)
jsonapi-rb 1.038M memsize ( 0.000 retained)
11.784k objects ( 0.000 retained)
50.000 strings ( 0.000 retained)
ams eager 2.470M memsize ( 184.410k retained)
30.534k objects ( 2.439k retained)
50.000 strings ( 50.000 retained)
jsonapi-rb eager 715.124k memsize ( 0.000 retained)
7.500k objects ( 0.000 retained)
50.000 strings ( 0.000 retained)
Comparison:
jsonapi-rb eager: 715124 allocated
jsonapi-rb : 1037676 allocated - 1.45x more
ams eager: 2469640 allocated - 3.45x more
ams : 2688112 allocated - 3.76x more
```
62 lines
1.3 KiB
Ruby
62 lines
1.3 KiB
Ruby
module BenchHelper
|
|
module_function
|
|
|
|
def clear_data
|
|
Comment.delete_all
|
|
Post.delete_all
|
|
User.delete_all
|
|
end
|
|
|
|
def seed_data
|
|
data_config = {
|
|
comments_per_post: 2,
|
|
posts: 20
|
|
}
|
|
|
|
u = User.create(first_name: 'Diana', last_name: 'Prince', birthday: 3000.years.ago)
|
|
|
|
data_config[:posts].times do
|
|
p = Post.create(user_id: u.id, title: 'Some Post', body: 'awesome content')
|
|
data_config[:comments_per_post].times do
|
|
Comment.create(author: 'me', comment: 'nice blog', post_id: p.id)
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_render(render_gem)
|
|
render_data(
|
|
User.first,
|
|
render_gem
|
|
)
|
|
end
|
|
|
|
def test_manual_eagerload(render_gem)
|
|
render_data(
|
|
User.includes(posts: [:comments]).first,
|
|
render_gem
|
|
)
|
|
end
|
|
|
|
def render_data(data, render_gem)
|
|
return render_with_ams(data) if render_gem == :ams
|
|
|
|
render_with_jsonapi_rb(data)
|
|
end
|
|
|
|
def render_with_ams(data)
|
|
ActiveModelSerializers::SerializableResource.new(
|
|
data,
|
|
include: 'posts.comments',
|
|
adapter: :json_api
|
|
).as_json
|
|
end
|
|
|
|
def render_with_jsonapi_rb(data)
|
|
JSONAPI::Serializable::Renderer.new.render(
|
|
data,
|
|
include: 'posts.comments',
|
|
class: { User: SerializableUser, Post: SerializablePost, Comment: SerializableComment }
|
|
)
|
|
end
|
|
end
|