Summary
Same shape as the /events/past issue (share findings with it — the code paths are siblings in EventsController):
- Measured 3h window on 2026-09-16/17: 122 requests, median 467ms, max 13.7s, 31 queries, median
db_runtime 83ms. Stale — re-measure before starting.
- Code path:
EventsController#upcoming → fetch_upcoming_events → paginated_events(upcoming: true) → load_events → EventPresenter.decorate_collection
- Suggested directions: same as
/events/past (query audit, batch loads, check existing event_card_component fragment hit rate)
Related: #2885
Summary
Same shape as the
/events/pastissue (share findings with it — the code paths are siblings inEventsController):db_runtime83ms. Stale — re-measure before starting.EventsController#upcoming→fetch_upcoming_events→paginated_events(upcoming: true)→load_events→EventPresenter.decorate_collection/events/past(query audit, batch loads, check existingevent_card_componentfragment hit rate)Related: #2885