Workshop show pages allocate ~7.3k objects per request with no caching (28% of app allocations)
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 52/100
- Tipo de issue
- Refactorización
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Área
- backend, performance
Línea de trabajo
Start by re-measuring current allocations for WorkshopsController#show in the Codebar requests dashboard or canonical logs. Read the show action, the EventCardComponent and chapters_sidebar caching patterns, and EventsController lines 12/19; inspect the sponsors, venue, organisers_grid, newsletter, and actions sections. Done means materially lower allocations, unchanged logged-in behaviour, and 304 responses for unchanged anonymous views.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Issue 2951: Workshop show pages allocate ~7.3k objects per request with no caching (28% of app allocations)
Summary
WorkshopsController#show is the app's top allocation consumer: 28% of all allocations over the last 7 days (2026-09-21..27), from 24,701 successful renders — 43% of all traffic. Every workshop page view rebuilds everything from scratch: the page has no caching at all, while sibling pages already use it (EventCardComponent fragment cache, chapters_sidebar fragment, fresh_when in EventsController).
Measured
7-day window 2026-09-21..27 (canonical logs, payload.allocations): 204.8M allocations across 24,701 x 200s (plus 179 404s). Per-request cost is extremely uniform: p50 7,348, p90 8,985, p95 12,913, median 8 queries, view p50 10ms — so this is per-render rendering cost, not a query or outlier problem. These numbers are stale by the time you read this — re-measure from current logs or the Codebar requests dashboard (allocations panel) before starting.
Per-render allocators, in rough order:
sanitize(@workshop.description)— the Rails HTML sanitizer is one of the heaviest single calls per rendershared/sponsors,shared/venue,members/organisers_grid,shared/newsletterpartials and the layout re-render every request- no fragment caching anywhere on the page
Suggested directions
- HTTP caching for anonymous GETs —
fresh_whenwith an etag on[@workshop.cache_key_with_version, ...], gated on!logged_in?(theactionspartial is per-user). The pattern already exists atEventsControllerlines 12/19. Crawlers and repeat anonymous visits then get 304s with near-zero allocations. - Fragment-cache the static sections (sponsors, venue, organisers grid) keyed on the workshop cache key — this also cuts allocations for logged-in views.
- Sanitize once on write (or cache the sanitized HTML) rather than per render.
Verify
payload.allocations p50 for WorkshopsController#show drops materially on the allocations panel; no visual or behavioural regression for logged-in members; conditional GETs return 304 for unchanged anonymous views.
Related: #2886-#2888 (same measurement method), #2891 (404 tail already resolved by the route constraint)
- Lenguaje dominante
- Ruby
- Estrellas
- 104
- Forks
- 205
- Merge medio
- 1 d 2 h
- PR fusionados (30 d)
- 77
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de codebar/planner
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 56/100
Los mantenedores suelen responder en 1 día
-
Chapter show pages allocate ~21k+ objects per render for large chapters (18% of app allocations)Abiertoperformance
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
codebar/planner#2952 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
InvitationManager silently no-ops on non-invitable events/workshops while controllers flash successAbiertobug
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
Todos los issues de codebar/planner
Issues similares
-
security
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
OSCON 2016Abiertocontent
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
rubyevents/rubyevents#2148 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
we-promise/sure#3838 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Allow simp/useradd 4.xAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
simp/pupmod-simp-pam#244 ·
Los mantenedores suelen responder en 7 días
-
Mend: dependency security vulnerability
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
ManageIQ/manageiq-ui-classic#10341 ·
Los mantenedores suelen responder en 1 día