Preload workshop_host in DashboardQuery.upcoming_events_for_user (per-workshop N+1 on /dashboard)

Aperta Adatta ai principianti
#3,070 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@davidmillen50 ci sta già lavorando.

Dal 2/11/2026.

  • #3074 di @davidmillen50 — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
82/100
Tipo di issue
Refactoring
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
rails, ruby
Ambito
backend, database

Direzione di ricerca

Inizia in app/queries/dashboard_query.rb intorno alle righe 27-40, dove upcoming_events_for_user usa eager_load(:sponsors) senza caricare l'host del workshop. Controlla come Workshop#host attraversa workshop_host e sponsor, e come la PR #3066 ha aggiunto il suo preload. Aggiungi preload(workshop_host: :sponsor) accanto al join esistente e lascia :workshop_host fuori da eager_load, come avverte l'issue. È completato quando il numero di query di /dashboard smette di crescere con il numero di workshop.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

performance

DashboardQuery.upcoming_events_for_user runs one workshop_host lookup per workshop on every /dashboard render. Give it the same treatment as PR #3066: keep :sponsors in the join and add preload(workshop_host: :sponsor).

  • app/queries/dashboard_query.rb:27-40 eager_loads :sponsors but never loads :workshop_host
  • Workshop#host lazy-loads through workshop_host&.sponsor, so each card costs up to two extra queries — up to 2 × DashboardQuery::MAX_WORKSHOP_QUERY per render
  • The dashboard action renders the same EventCardComponent → WorkshopPresenter#venue → model.host path that PR #3066 fixed for the homepage
  • Do not add :workshop_host to the eager_load list: sharing the workshop_sponsors join alias is the #2975 host-loss trap

Raised from the review of PR #3066; the gap predates that PR.

Lingua principale
Ruby
Stelle
106
Fork
208
Merge medio
19h 51m
PR unite (30g)
57

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di codebar/planner

Tutte le issue di codebar/planner

Issue simili

Altre issue su Ruby

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.