Skip to content

Commit b2589a6

Browse files
authored
[ruby/agoo] Reduce allocations (#8861)
Instantiating an Array with a fixed size and a block is faster than appending to an empty array. Also map only once over the records instead of twice.
1 parent 7c18a8b commit b2589a6

File tree

1 file changed

+18
-21
lines changed

1 file changed

+18
-21
lines changed

frameworks/Ruby/agoo/app.rb

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
})
1616
end
1717

18-
MAX_PK = 10_000
18+
QUERY_RANGE = (1..10_000).freeze
19+
ALL_IDS = QUERY_RANGE.to_a
1920
QUERIES_MIN = 1
2021
QUERIES_MAX = 500
2122

@@ -27,7 +28,7 @@ def self.extract_queries_param(request = nil)
2728
end
2829

2930
def self.get_one_random_number
30-
1 + Random.rand(MAX_PK)
31+
Random.rand(QUERY_RANGE)
3132
end
3233

3334
def self.get_one_record(id = get_one_random_number)
@@ -141,33 +142,29 @@ def self.call(_req)
141142

142143
class QueriesHandler < BaseHandler
143144
def self.call(req)
144-
records =
145-
[].tap do|r|
146-
(extract_queries_param req).times do
147-
r << get_one_record()
148-
end
149-
end
145+
queries = extract_queries_param req
146+
records = ALL_IDS.sample(queries).map do |id|
147+
get_one_record(id)
148+
end
150149

151150
json_response(records)
152151
end
153152
end
154153

155154
class UpdatesHandler < BaseHandler
156155
def self.call(req)
157-
records =
158-
[].tap do|r|
159-
(extract_queries_param req).times do
160-
r << get_one_record()
161-
end
162-
end
163-
164-
updated_records =
165-
records.map { |r| r['randomnumber'] = get_one_random_number; r }
156+
queries = extract_queries_param req
157+
records = ALL_IDS.sample(queries).map do |id|
158+
world = get_one_record(id)
159+
world['randomnumber'] = get_one_random_number
160+
world
161+
end
166162

167163
sql_values =
168-
updated_records.
169-
map { |r| "(#{ r['id'] }, #{ r['randomnumber'] })"}.
170-
join(', ')
164+
records.
165+
map { |r|
166+
"(#{ r['id'] }, #{ r['randomnumber'] })"
167+
}.join(', ')
171168

172169
$pool.with do |conn|
173170
conn.exec(<<-SQL)
@@ -180,7 +177,7 @@ def self.call(req)
180177
SQL
181178
end
182179

183-
json_response(updated_records)
180+
json_response(records)
184181
end
185182
end
186183

0 commit comments

Comments
 (0)