3838# end
3939# end
4040
41- def print_stats ( message , count , ams_time , our_time )
41+ def print_stats ( message , count , ams_time , jsonapi_time , our_time )
4242 format = '%-15s %-10s %s'
4343 puts ''
4444 puts message
4545 puts format ( format , 'Serializer' , 'Records' , 'Time' )
4646 puts format ( format , 'AMS serializer' , count , ams_time . round ( 2 ) . to_s + ' ms' )
47+ puts format ( format , 'jsonapi-rb serializer' , count , jsonapi_time . round ( 2 ) . to_s + ' ms' )
4748 puts format ( format , 'Fast serializer' , count , our_time . round ( 2 ) . to_s + ' ms' )
4849 end
4950
50- def run_hash_benchmark ( message , movie_count , our_serializer , ams_serializer )
51+ def run_hash_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer )
5152 our_time = Benchmark . measure { our_hash = our_serializer . serializable_hash } . real * 1000
5253 ams_time = Benchmark . measure { ams_hash = ams_serializer . as_json } . real * 1000
53- print_stats ( message , movie_count , ams_time , our_time )
54+ jsonapi_time = Benchmark . measure { ams_hash = jsonapi_serializer . to_hash } . real * 1000
55+
56+ print_stats ( message , movie_count , ams_time , jsonapi_time , our_time )
5457 end
5558
56- def run_json_benchmark ( message , movie_count , our_serializer , ams_serializer )
59+ def run_json_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer )
5760 our_json = nil
5861 ams_json = nil
62+ jsonapi_json = nil
5963 our_time = Benchmark . measure { our_json = our_serializer . serialized_json } . real * 1000
6064 ams_time = Benchmark . measure { ams_json = ams_serializer . to_json } . real * 1000
61- print_stats ( message , movie_count , ams_time , our_time )
62- return our_json , ams_json
65+ jsonapi_time = Benchmark . measure { jsonapi_json = jsonapi_serializer . to_json } . real * 1000
66+
67+ print_stats ( message , movie_count , ams_time , jsonapi_time , our_time )
68+ return our_json , ams_json , jsonapi_json
6369 end
6470
6571 context 'when comparing with AMS 0.10.x' do
66- #[1, 25, 250, 1000].each do |movie_count|
67- [ 1 ] . each do |movie_count |
72+ [ 1 , 25 , 250 , 1000 ] . each do |movie_count |
6873 speed_factor = 25
6974 it "should serialize #{ movie_count } records atleast #{ speed_factor } times faster than AMS" do
7075 ams_movies = build_ams_movies ( movie_count )
71- jsonapi_movies = build_jsonapi_movies ( movie_count )
7276 movies = build_movies ( movie_count )
77+ jsonapi_movies = build_jsonapi_movies ( movie_count )
7378 our_serializer = MovieSerializer . new ( movies )
7479 ams_serializer = ActiveModelSerializers ::SerializableResource . new ( ams_movies )
75-
76- puts JSONAPI ::Serializable ::Renderer . new . render (
77- jsonapi_movies ,
78- class : {
79- JSONAPIMovie : JSONAPIMovieSerializer ,
80- JSONAPIActor : JSONAPIActorSerializer ,
81- JSONAPIUser : JSONAPIUserSerializer ,
82- JSONAPIMovieType : JSONAPIMovieTypeSerializer
83- } ,
84- ) . to_json
80+ jsonapi_serializer = JSONAPISerializer . new ( jsonapi_movies )
8581
8682 message = "Serialize to JSON string #{ movie_count } records"
87- our_json , ams_json = run_json_benchmark ( message , movie_count , our_serializer , ams_serializer )
83+ our_json , ams_json , jsonapi_json = run_json_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer )
8884
8985 message = "Serialize to Ruby Hash #{ movie_count } records"
90- run_hash_benchmark ( message , movie_count , our_serializer , ams_serializer )
86+ run_hash_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer )
9187
9288 expect ( our_json . length ) . to eq ams_json . length
9389 expect { our_serializer . serialized_json } . to perform_faster_than { ams_serializer . to_json } . at_least ( speed_factor ) . times
@@ -96,44 +92,30 @@ def run_json_benchmark(message, movie_count, our_serializer, ams_serializer)
9692 end
9793 end
9894
99- # context 'when comparing with AMS 0.10.x and with includes and meta' do
100- # #[1, 25, 250, 1000].each do |movie_count|
101- # [2].each do |movie_count|
102- # speed_factor = 25
103- # it "should serialize #{movie_count} records atleast #{speed_factor} times faster than AMS" do
104- # ams_movies = build_ams_movies(movie_count)
105- # movies = build_movies(movie_count)
106- # options = {}
107- # options[:meta] = { total: movie_count }
108- # options[:include] = [:actors, :movie_type]
109- # our_serializer = MovieSerializer.new(movies, options)
110- # ams_serializer = ActiveModelSerializers::SerializableResource.new(ams_movies, include: options[:include], meta: options[:meta])
111- #
112- # message = "Serialize to JSON string #{movie_count} with includes and meta"
113- # our_json, ams_json = run_json_benchmark(message, movie_count, our_serializer, ams_serializer)
114- #
115- # puts our_json
116- # puts ams_json
117- #
118- # jsonapi_movies = build_jsonapi_movies(movie_count)
119- # puts JSONAPI::Serializable::Renderer.new.render(
120- # jsonapi_movies,
121- # class: {
122- # JSONAPIMovie: JSONAPIMovieSerializer,
123- # JSONAPIActor: JSONAPIActorSerializer,
124- # JSONAPIUser: JSONAPIUserSerializer,
125- # JSONAPIMovieType: JSONAPIMovieTypeSerializer
126- # },
127- # include: options[:include]
128- # ).to_json
129- #
130- # message = "Serialize to Ruby Hash #{movie_count} with includes and meta"
131- # run_hash_benchmark(message, movie_count, our_serializer, ams_serializer)
132- #
133- # expect(our_json.length).to eq ams_json.length
134- # expect { our_serializer.serialized_json }.to perform_faster_than { ams_serializer.to_json }.at_least(speed_factor).times
135- # expect { our_serializer.serializable_hash }.to perform_faster_than { ams_serializer.as_json }.at_least(speed_factor).times
136- # end
137- # end
138- # end
95+ context 'when comparing with AMS 0.10.x and with includes and meta' do
96+ [ 1 , 25 , 250 , 1000 ] . each do |movie_count |
97+ speed_factor = 25
98+ it "should serialize #{ movie_count } records atleast #{ speed_factor } times faster than AMS" do
99+ ams_movies = build_ams_movies ( movie_count )
100+ movies = build_movies ( movie_count )
101+ jsonapi_movies = build_jsonapi_movies ( movie_count )
102+ options = { }
103+ options [ :meta ] = { total : movie_count }
104+ options [ :include ] = [ :actors , :movie_type ]
105+ our_serializer = MovieSerializer . new ( movies , options )
106+ ams_serializer = ActiveModelSerializers ::SerializableResource . new ( ams_movies , include : options [ :include ] , meta : options [ :meta ] )
107+ jsonapi_serializer = JSONAPISerializer . new ( jsonapi_movies , include : options [ :include ] , meta : options [ :meta ] )
108+
109+ message = "Serialize to JSON string #{ movie_count } with includes and meta"
110+ our_json , ams_json = run_json_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer )
111+
112+ message = "Serialize to Ruby Hash #{ movie_count } with includes and meta"
113+ run_hash_benchmark ( message , movie_count , our_serializer , ams_serializer , jsonapi_serializer )
114+
115+ expect ( our_json . length ) . to eq ams_json . length
116+ expect { our_serializer . serialized_json } . to perform_faster_than { ams_serializer . to_json } . at_least ( speed_factor ) . times
117+ expect { our_serializer . serializable_hash } . to perform_faster_than { ams_serializer . as_json } . at_least ( speed_factor ) . times
118+ end
119+ end
120+ end
139121end
0 commit comments