Repository navigation
Cut per-request work on the schedule and all events pages - #429
Merged
Merged
Conversation
- Schedule page: cache the FullCalendar JSON string (Program#fullcalendar _events_json) instead of building it from cached records on every request. Drop the view fragment cache: its key included that JSON, so it never saved work, and it froze the "now" marker for the cache's life. - Breaks look up the venue's room guids once, not once per break. - Personal schedule: User#planned_event_ids gets the user's favourited, speaking and volunteering event ids in two queries, replacing Event#planned_for_user? (three queries per event). - All events: find unscheduled events with where.not instead of loading every confirmed event and subtracting arrays. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* origin/main: Render iCal feeds as plain text/calendar responses Paginate admin revision history and trim admin events preloads Load nav conference links with SQL instead of per-conference can? Share cached event cards between viewers who see the same card Find happening now sessions in SQL with HappeningNowQuery # Conflicts: # spec/controllers/schedules_controller_spec.rb
This was referenced Nov 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
From the memory audit. Production profile:
/schedulecosts ~244k allocations cold / 46k warm;/schedule/events437k / 65k.Schedule page (
/schedule)Program#fullcalendar_events_jsonnow caches the JSON string, with the same cache key as before (program + selected schedule version), so a hit is one string read.@now, so it served a stale "now" marker.Personal schedule (
favourites=true)User#planned_event_idsreturns the user's favourited, speaking and volunteering event ids in two queries. It replacesEvent#planned_for_user?(three queries per event) on the schedule and all events pages. A spec checks it matchesplanned_for_user?.All events (
/schedule/events)where.not(id: ...)instead of loading every confirmed event and subtracting arrays.Related: #427 makes the event cards on this page shareable in the cache for signed-in users. #426 touches
happening_now; this PR leaves that action alone to avoid conflicts.Tests: new controller specs for the schedule JSON (all vs favourites) and the events page (scheduled/unscheduled, favourites), plus model specs. Schedule, program, formatter and feature specs and all Cucumber scenarios pass.
.rubocop_todo.ymlraisesMetrics/ClassLengthforUserby 4 lines.🤖 Generated with Claude Code