You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
docuseal/vendor/bundle/ruby/4.0.0/gems/representable-3.2.0/test/benchmarking.rb

84 lines
2.0 KiB

require 'test_helper'
require 'benchmark'
SONG_PROPERTIES = 1000.times.collect do |i|
"property_#{i}"
end
module SongRepresenter
include Representable::JSON
SONG_PROPERTIES.each { |p| property p }
end
class SongDecorator < Representable::Decorator
include Representable::JSON
SONG_PROPERTIES.each { |p| property p }
end
module AlbumRepresenter
include Representable::JSON
# collection :songs, extend: SongRepresenter
collection :songs, extend: SongDecorator
end
def random_song
attrs = Hash[SONG_PROPERTIES.collect { |n| [n,n] }]
OpenStruct.new(attrs)
end
times = []
3.times.each do
album = OpenStruct.new(songs: 100.times.collect { random_song })
times << Benchmark.measure do
puts "================ next!"
album.extend(AlbumRepresenter).to_json
end
end
puts times.join("")
# 100 songs, 100 attrs
# 0.050000 0.000000 0.050000 ( 0.093157)
## 100 songs, 1000 attrs
# 0.470000 0.010000 0.480000 ( 0.483708)
### without binding cache:
# 2.790000 0.030000 2.820000 ( 2.820190)
### with extend: on Song, with binding cache>
# 2.490000 0.030000 2.520000 ( 2.517433) 2.4-3.0
### without skip?
# 2.030000 0.020000 2.050000 ( 2.050796) 2.1-2.3
### without :writer
# 2.270000 0.010000 2.280000 ( 2.284530 1.9-2.2
### without :render_filter
# 2.020000 0.000000 2.020000 ( 2.030234) 1.5-2.0
###without default_for and skipable?
# 1.730000 0.010000 1.740000 ( 1.735597 1.4-1.7
### without :serialize
# 1.780000 0.010000 1.790000 ( 1.786791) 1.4-1.7
### using decorator
# 1.400000 0.030000 1.430000 ( 1.434206) 1.4-1.6
### with prepare AFTER representable?
# 1.330000 0.010000 1.340000 ( 1.335900) 1.1-1.3
# representable 2.0
# 3.000000 0.020000 3.020000 ( 3.013031) 2.7-3.0
# no method missing
# 2.280000 0.030000 2.310000 ( 2.313522) 2.2-2.5
# no def_delegator in Definition
# 2.130000 0.010000 2.140000 ( 2.136115) 1.7-2.1