0

I'm looking into techniques for rails to speed up load time. I'm working with a page right now that is rendering a ton of data at render time. I'm trying to step through each load and see if I can optimize the time.

The current issue I'm having is this;

 (5.4ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23022]]
   (4.4ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23023]]
   (4.2ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23024]]
   (6.0ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23029]]
   (7.1ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23121]]
   (6.0ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23180]]
   (4.2ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23229]]
   (4.2ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23250]]
   (6.6ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23254]]
   (4.4ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23255]]
   (4.0ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23259]]
   (6.5ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23154]]
   (6.6ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23177]]
   (5.1ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23201]]
   (4.2ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23221]]
   (4.1ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23232]]
   (7.9ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23235]]
   (4.3ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23237]]
   (4.1ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23238]]
   (5.9ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23248]]
   (7.8ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23295]]
   (6.8ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23119]]
   (4.2ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23123]]
   (4.1ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23178]]
   (7.9ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23231]]
   (4.4ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23239]]
   (4.3ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23240]]
   (6.4ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23241]]
   (5.1ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23243]]
   (6.7ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23245]]
   (4.3ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23247]]
   (4.2ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23249]]
   (6.9ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23251]]
   (4.4ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23256]]
   (4.2ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23257]]
   (6.5ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23275]]
   (6.4ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23350]]
   (5.0ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23272]]
   (4.2ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23296]]
   (4.0ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23401]]
   (8.8ms)  SELECT COUNT(*) FROM "attendees" WHERE "attendees"."rsvp_id" = $1  [["rsvp_id", 23347]]

I'm getting that from this code:

def number_attending
  rsvp.attendees.count
end 

So RSVPS have many attendees. I'm calling that method here.

<% rsvps.each do |rsvp| %>
 <span class="event-response__indicator event-response__indicator--guests" title="<%= rsvp.number_attending %> Guests">
<% end %>

So the problem is. I'd like to not have to iterate through every rsvp and attendee on the load of the page. Is there a way to preload that data. Something like Eagerloading? And if so, how could I implement it with the info given?

Bitwise
  • 8,021
  • 22
  • 70
  • 161

2 Answers2

0

check out this link, this is specifically for avoiding n+1 queries for counts.

this explains to perform a join query or create a view for the same

Community
  • 1
  • 1
Bijal Gajjar
  • 47
  • 1
  • 6
-1

Well, you did't show how you are querying the rsvps, so I will consider it as rsvps = Rsvp.all. You can just add an includes method, so it will be like this rsvps = Rsvp.includes(:attendees).all.

Also I'm not sure if it would avoid querying when running this line rsvp.attendees.count. I ran into some situations where the count method triggered a query but a size method did not, so you may have to replace this line for rsvp.attendees.size.

Samir Haddad
  • 159
  • 2
  • 10