Browse Source

[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.
Petrik de Heus 1 year ago
parent
commit
b2589a6335
1 changed files with 18 additions and 21 deletions
  1. 18 21
      frameworks/Ruby/agoo/app.rb

+ 18 - 21
frameworks/Ruby/agoo/app.rb

@@ -15,7 +15,8 @@ $pool = ConnectionPool.new(size: 256, timeout: 5) do
                              })
         end
 
-MAX_PK = 10_000
+QUERY_RANGE = (1..10_000).freeze
+ALL_IDS = QUERY_RANGE.to_a
 QUERIES_MIN = 1
 QUERIES_MAX = 500
 
@@ -27,7 +28,7 @@ class BaseHandler
   end
 
   def self.get_one_random_number
-    1 + Random.rand(MAX_PK)
+    Random.rand(QUERY_RANGE)
   end
 
   def self.get_one_record(id = get_one_random_number)
@@ -141,12 +142,10 @@ end
 
 class QueriesHandler < BaseHandler
   def self.call(req)
-    records =
-        [].tap do|r|
-          (extract_queries_param req).times do
-            r << get_one_record()
-          end
-        end
+    queries = extract_queries_param req
+    records = ALL_IDS.sample(queries).map do |id|
+      get_one_record(id)
+    end
 
     json_response(records)
   end
@@ -154,20 +153,18 @@ end
 
 class UpdatesHandler < BaseHandler
   def self.call(req)
-    records =
-        [].tap do|r|
-          (extract_queries_param req).times do
-            r << get_one_record()
-          end
-        end
-
-    updated_records =
-        records.map { |r| r['randomnumber'] = get_one_random_number; r }
+    queries = extract_queries_param req
+    records = ALL_IDS.sample(queries).map do |id|
+      world = get_one_record(id)
+      world['randomnumber'] = get_one_random_number
+      world
+    end
 
     sql_values =
-        updated_records.
-          map { |r| "(#{ r['id'] }, #{ r['randomnumber'] })"}.
-            join(', ')
+        records.
+          map { |r|
+            "(#{ r['id'] }, #{ r['randomnumber'] })"
+          }.join(', ')
 
     $pool.with do |conn|
       conn.exec(<<-SQL)
@@ -180,7 +177,7 @@ class UpdatesHandler < BaseHandler
       SQL
     end
 
-    json_response(updated_records)
+    json_response(records)
   end
 end