Workshop show pages allocate ~7.3k objects per request with no caching (28% of app allocations)
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 52/100
- Issue 类型
- 重构
- 描述清晰度
- 基本清楚
- 活跃度
- 活跃
- 领域
- backend, performance
调研方向
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.
由索引模型根据 Issue 内容生成。
描述
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)
- 主要语言
- Ruby
- 星标
- 104
- 派生
- 205
- 平均合并
- 1 天 2 小时
- 30 天内合并 PR
- 77
环境准备
- 提供 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
codebar/planner 的其他 Issue
-
enhancement
难度 2/5 1-3 小时 新手友好度 76/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 56/100
维护者通常 1 天内回复
-
Chapter show pages allocate ~21k+ objects per render for large chapters (18% of app allocations)未关闭performance
难度 4/5 3-5 天 新手友好度 55/100
codebar/planner#2952 · 已指派 1 人 ·
维护者通常 1 天内回复
-
InvitationManager silently no-ops on non-invitable events/workshops while controllers flash success未关闭bug
难度 3/5 1-2 天 新手友好度 72/100
维护者通常 1 天内回复
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 76/100
FreeCAD/homebrew-freecad#870 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
-
security
难度 2/5 1-3 小时 新手友好度 68/100
维护者通常 1 天内回复
-
OSCON 2016未关闭content
难度 2/5 1-3 小时 新手友好度 68/100
rubyevents/rubyevents#2148 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
we-promise/sure#3838 · 2 条评论 ·
维护者通常 1 天内回复